linq 转换列表< T>为列表〈(T,T)>[已关闭]

cu6pst1q  于 2023-03-27  发布在  其他
关注(0)|答案(2)|浏览(137)

已关闭。此问题需要details or clarity。当前不接受答案。
**想要改进此问题?**添加详细信息并通过editing this post阐明问题。

昨天关门了。
Improve this question
我有一个List<System.DateTime> MonthlyDates
我想在不迭代的情况下将MonthlyDates转换为List<(,)>
因此,如果MonthlyDates是contains(忘记这些是字符串,它们已被解析为DateTime

..."7/31/17", "8/31/17", "9/29/17", "10/31/17",  "11/30/17",  "12/29/17"...

我想要一个新的日期对List,如下所示:

("7/31/17", "8/31/17") , ("8/31/17", "9/29/17"), ("9/29/17", "10/31/17"), ("10/31/17",  "11/30/17"), ...

List<T>List <(T,T)>的转换

eiee3dmh

eiee3dmh1#

var prior = MonthlyDates[0];
var result = MonthlyDates.Skip(1).Select(d => 
    {
        var buf = prior;
        prior = d;
        return (buf, d);
    });

如果真的需要,可以在末尾添加.ToList(),但您通常会发现跳过它可以获得更好的性能。

eufgjt7s

eufgjt7s2#

您可以使用LINQ以延迟的方式转换数据。LINQ查询变量本身只存储查询命令。查询的实际执行被延迟,直到您通过foreach或将查询具体化为某些集合或结果的方法(如ToListToArrayCount等)迭代查询变量。
所以你可以使用下一个查询:

var datePairs = monthlyDates.Zip(monthlyDates.Skip(1), (first, second) => (first, second));

Zip方法将指定的函数应用于两个序列的相应元素,产生一个结果序列。在这个例子中,我们使用monthlyDates两次作为两个集合,偏移量为1个元素。这允许相邻项的集合按顺序迭代,将它们组合成一个集合。

相关问题