C# 列表<;元组<;T>>;|带数组的AddRange

C# 列表<;元组<;T>>;|带数组的AddRange,c#,arrays,list,collections,tuples,C#,Arrays,List,Collections,Tuples,我想知道如何将数组添加到列表中 我的(短)代码: double[] var1 = new double[5] { 1, 2, 3, 4, 5 }; double[] var2 = new double[5] { 1.5, 1.5, 2.5, 1.2, 1.1 }; List<Tuple<double, double>> tup = new List<Tuple<double, double>>(); 有没有一种更简单的方法来存档?使用AddRa

我想知道如何将数组添加到
列表中

我的(短)代码:

double[] var1 = new double[5] { 1, 2, 3, 4, 5 };
double[] var2 = new double[5] { 1.5, 1.5, 2.5, 1.2, 1.1 };

List<Tuple<double, double>> tup = new List<Tuple<double, double>>();
有没有一种更简单的方法来存档?使用
AddRange
的任何方法都可能?

您可以使用LINQ的扩展方法。根据文件,这是:

将指定的函数应用于两个序列的对应元素,生成结果序列

在这种情况下,我们可以使用
Tuple.Create
函数从两个元素创建一个Tuple

var tup = var1.Zip(var2, Tuple.Create).ToList();
但是请注意,在序列长度不相同的情况下,这可能会给代码带来稍微不同的结果。再次根据文档:

如果输入序列的元素数不相同,则该方法将组合元素,直到到达其中一个序列的末尾


查看工作演示。

您必须自己循环,或者让LINQ循环,
可枚举。Zip
通过索引连接:

 List<Tuple<double, double>> tup = var1.Zip(var2, (d1, d2) => Tuple.Create(d1, d2))
    .ToList();
List tup=var1.Zip(var2,(d1,d2)=>Tuple.Create(d1,d2))
.ToList();
因此,这不是更有效,而是更具可读性。

您可以使用
Zip
将集合投影到元组列表中:

var tup = var1.Zip(var2, (v1, v2) => new Tuple<double, double>(v1,v2))
              .ToList();
var-tup=var1.Zip(var2,(v1,v2)=>new-Tuple(v1,v2))
.ToList();

但就我个人而言,我发现你最初的方法更容易阅读和理解其意图。性能差异应该很小。更短的代码并不总是更好的代码。

工作正常。非常感谢:)
var tup = var1.Zip(var2, (v1, v2) => new Tuple<double, double>(v1,v2))
              .ToList();