Kja*_*ara 3 c# linq arrays ienumerable valuetuple
我有一些类型S和T(例如S=object和T=string)。我有一对这些类型的数组,即
(S[], T[]) pairOfArrays;
Run Code Online (Sandbox Code Playgroud)
我想将其转换为成对的数组,即
(S, T)[] arrayOfPairs;
Run Code Online (Sandbox Code Playgroud)
我怎么做?如果可能的话,我对 LINQ 解决方案最感兴趣。请假设 中的两个数组pairOfArrays具有相同的长度。
我知道另一个方向:
pairOfArrays = (arrayOfPairs.Select(i => i.Item1).ToArray(),
arrayOfPairs.Select(i => i.Item2).ToArray());
Run Code Online (Sandbox Code Playgroud)
我所寻求的方向的问题是:为了迭代(使用Select等)我需要一个IEnumerable,但(S[], T[])不是IEnumerable。如果我从 开始,那么我不知道如何获取与当前语句中pairOfArrays.Item1.Select(...相同的条目(按索引)。Item2Select
使用Zip,您可以获取相应的元素并将它们转换为元组:
var arrayOfPairs = pairOfArrays.Item1.Zip(pairOfArrays.Item2, (f, s) => new Tuple<S, string>(f, s))
.ToArray();
Run Code Online (Sandbox Code Playgroud)
或从 C#7 开始:
var arrayOfPairs = pairOfArrays.Item1.Zip(pairOfArrays.Item2, (f, s) => (f, s))
.ToArray();
Run Code Online (Sandbox Code Playgroud)
比上面的方法不太惯用但仍然是一个很好的解决方案Enumerable.Range:
var arrayOfPairs =
Enumerable.Range(0, pairOfArrays.Item1.Length)
.Select(index => (pairOfArrays.Item1[index], pairOfArrays.Item2[index]))
.ToArray();
Run Code Online (Sandbox Code Playgroud)