gpt4 book ai didi

linq - 成对分组项目

转载 作者:行者123 更新时间:2023-12-04 03:13:10 25 4
gpt4 key购买 nike

我有项目列表,例如:{ i1, i2, i3, i4, i5, i6, i7 } .
我想得到一个列表,其中每个项目都是源列表中的一对项目:{ {i1, i2}, {i3, i4}, {i5, i6}, {i7} } .i7是成对的单个项目,因为没有项目 i8 .
可以用 LINQ 吗?

最佳答案

好吧,你可以这样做:

var pairs = sequence.Select((value, index) => new { value, index } )
.GroupBy(x => x.index / 2, x => x.value)

结果是 IGrouping<int, T>键为 0、1、2 等,每组的内容为一项或两项。

但是,我可能会编写一个自定义扩展方法:
public static IEnumerable<Tuple<T, T>> PairUp<T>(this IEnumerable<T> source)
{
using (var iterator = source.GetEnumerator())
{
while (iterator.MoveNext())
{
var first = iterator.Current;
var second = iterator.MoveNext() ? iterator.Current : default(T);
yield return Tuple.Create(first, second);
}
}
}

这将产生一系列元组 - 这里的缺点是最终的元组将具有 T 的默认值。如果序列具有奇数个项目,则作为“第二个”项目。对于序列仅由非空值组成的引用类型,没问题,但对于某些序列,它无济于事。

关于linq - 成对分组项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6888236/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com