gpt4 book ai didi

c# - 从 2 个可枚举对象创建一个枚举器 <{datatype, datatype}>?

转载 作者:太空宇宙 更新时间:2023-11-03 20:43:39 26 4
gpt4 key购买 nike

嗨。

这就是我想要做的:

    str2 = "91";
str1 = "19";
var testQuery = from c1 in str1
from c2 in str2
select new {c1, c2};
foreach (var enumerable in testQuery)
{
Console.WriteLine(enumerable.c1 + " | " + enumerable.c2);
}

我想要的:

9 | 1
1 | 9

我真正得到的是:

1 | 9
1 | 1
9 | 9
9 | 1

代码是一个纯粹的例子。它可能遍历数组或其他一些集合。它还会做一些其他的事情,但它们与这个问题无关。

如果没有 linq,我可以做这样的事情:

    for (int i = 0; i < str1.Length -1; i++)
{
Console.WriteLine(str1[i] + " | " + str2[i]);
}

但我想要一个可以完成我需要的一切的查询。

我真的必须创建自己的枚举器方法来使用 yield 来创建我想要的吗?

编辑:根据要求:我希望能够做的事情的一个例子:

    str1 = "91";
str2 = "19";

char[] digitX = str1.ToString().Reverse().ToArray();
char[] digitY = str2.ToString().Reverse().ToArray();

var q = digitX.Select((c1, i) => new {c1 = c1 - '0', c2 = digitY[i] - '0' });

我想在实际查询中进行反向操作等。所以我把它全部收集起来。额外:能够使用类似于 sql 的糖衣语法来实现这一点,我会很兴奋。也就是说,不是方法链。

最佳答案

我的另一个答案没有它应有的用处,因为 Enumerable.Zip 函数是在版本 4 中添加的。

那么,下面是如何推出自己的:

public static class EnumerableExtensions
{
public static IEnumerable<TResult> Zip<TFirst, TSecond, TResult>(
IEnumerable<TFirst> first,
IEnumerable<TSecond> second,
Func<TFirst, TSecond, TResult> resultSelector)
{
using(var firstEnum = first.GetEnumerator())
using(var secondEnum = second.GetEnumerator())
{
while(firstEnum.MoveNext() && secondEnum.MoveNext())
{
yield return resultSelector(firstEnum.Current, secondEnum.Current);
}
}
}
}

关于c# - 从 2 个可枚举对象创建一个枚举器 <{datatype, datatype}>?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1616554/

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