gpt4 book ai didi

c# - LINQ 压缩所有元素

转载 作者:行者123 更新时间:2023-12-03 19:51:13 26 4
gpt4 key购买 nike

有没有办法利用Enumerable.Zip ,其中 IEnumerable 中的所有元素s 被使用了吗?如果IEnumerable s 有不同的计数,默认剩余合并为 default(T) .

示例

var first = new int[] { 1, 2, 3, 4, 5 };
var second = new string[] { "a", "b", "c" };
var zipped = first.Zip(second, (f, s) => new { f, s });
// actual: [ {1, "a"}, {2, "b"}, {3, "c"} ]
// expecting: [ {1, "a"}, {2, "b"}, {3, "c"}, {4, null}, {5, null} ]

var first = new int[] { 1, 2, 3 };
var second = new string[] { "a", "b", "c", "d", "e" };
var zipped = first.Zip(second, (f, s) => new { f, s });
// actual: [ {1, "a"}, {2, "b"}, {3, "c"} ]
// expecting: [ {1, "a"}, {2, "b"}, {3, "c"}, {0, "d"}, {0, "e"} ]

最佳答案

那么您可以创建您的自定义 Zip扩展方法:

static IEnumerable<T> Zip<T1, T2, T>(this IEnumerable<T1> first,
IEnumerable<T2> second, Func<T1, T2, T> operation)
{
using (var iter1 = first.GetEnumerator())
using (var iter2 = second.GetEnumerator())
{
while (iter1.MoveNext())
{
if (iter2.MoveNext())
{
yield return operation(iter1.Current, iter2.Current);
}
else
{
yield return operation(iter1.Current, default(T2));
}
}
while (iter2.MoveNext())
{
yield return operation(default(T1), iter2.Current);
}
}
}

主要思想取自此 post回答。您可以在 dotnetfiddle 中测试它如果你想

关于c# - LINQ 压缩所有元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44010247/

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