c# - 将数组对转换为数组对(如果可能,使用 LINQ)

标签 c# arrays linq ienumerable valuetuple

我有一些类型 ST(例如 S=objectT=string)。 我有一对这些类型的数组,即

(S[], T[]) pairOfArrays;

我想把它转换成一对数组,即

(S, T)[] arrayOfPairs;

我该怎么做?如果可能的话,我对 LINQ 的解决方案最感兴趣。 请假设 pairOfArrays 中的两个数组具有相同的长度。


我知道另一个方向:

pairOfArrays = (arrayOfPairs.Select(i => i.Item1).ToArray(),
                arrayOfPairs.Select(i => i.Item2).ToArray());

我所寻求的方向的问题是:为了迭代(使用 Select 等)我需要一个 IEnumerable,但是 (S[] , T[]) 不是 IEnumerable。如果我从 pairOfArrays.Item1.Select(... 开始,那么我不知道如何到达 Item2 的相同条目(按索引)我目前在我的 Select 声明中。

最佳答案

使用Zip,可以得到相应的元素,并将它们转化为元组:

var arrayOfPairs = pairOfArrays.Item1.Zip(pairOfArrays.Item2, (f, s) => new Tuple<S, string>(f, s))
                               .ToArray();

或从 C#7 开始:

var arrayOfPairs = pairOfArrays.Item1.Zip(pairOfArrays.Item2, (f, s) => (f, s))
                               .ToArray();

使用 Enumerable.Range 比上面的方法不那么惯用,但仍然是一个很好的解决方案:

var arrayOfPairs = 
    Enumerable.Range(0, pairOfArrays.Item1.Length)
            .Select(index => (pairOfArrays.Item1[index], pairOfArrays.Item2[index]))
            .ToArray();

关于c# - 将数组对转换为数组对(如果可能,使用 LINQ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53558508/

相关文章:

c# - 使用指令与完整路径名

c# - 哈希码总是一样的?

python - 如何从子矩阵组成矩阵?

c# - 如何使用 Linq 或 Lambda 连接一对多表并将扁平化结果投影为匿名类型

linq - foreach 或 switch 弄乱了 linq 查询?

c# - 与 LINQ 相比,为什么 Array.Sort() 这么慢?

c# - Task.Run a void 方法和 Task 方法返回 null 有区别吗?

c# - 将数据表值保存为空字符串而不是 null

javascript - 分配一个变量以及用另一个数组的项目迭代for循环

javascript - 将随机字符串插入每个空格实例中