C# 获取由元组列表的第一个值组成的数组

C# 获取由元组列表的第一个值组成的数组,c#,list,loops,iterator,tuples,C#,List,Loops,Iterator,Tuples,在我的C代码中,我有一个元组列表。元组本身由两个double类型的数字和一个LocalDate类型的对象组成 创建仅包含每个列表项的前双精度值的双精度数组的优雅方法是什么 因此,我需要一个只包含列表中LocalDate对象的ArrayList。这一秩序应该得到维护 预期结果应该是: double[] => [1, 12, 31] double[] => [10, 310, 110] ArrayList<> => [LocalDate1, LocalDate2, Lo

在我的C代码中,我有一个元组列表。元组本身由两个double类型的数字和一个LocalDate类型的对象组成

创建仅包含每个列表项的前双精度值的双精度数组的优雅方法是什么

因此,我需要一个只包含列表中LocalDate对象的ArrayList。这一秩序应该得到维护

预期结果应该是:

double[] => [1, 12, 31]
double[] => [10, 310, 110]
ArrayList<> => [LocalDate1, LocalDate2, LocalDate3]

我知道通常的方法是在for循环中迭代列表,并通过这个循环创建数组。然而,我认为应该有一种更简洁和优雅的方式。

Linq将是一种方式:

var firstValues = tupleList.Select(x => x.Item1).ToList();
这会将元组列表投影到仅包含第一个项的列表中,并保持它们的顺序。第二,第三,第n项也一样。
如果您想要一个数组,只需调用ToArray而不是ToList。

Linq将是一种方法:

var firstValues = tupleList.Select(x => x.Item1).ToList();
这会将元组列表投影到仅包含第一个项的列表中,并保持它们的顺序。第二,第三,第n项也一样。
如果需要数组,只需调用ToArray而不是ToList。

这可以通过循环的基线完成:

//Sorry for any Syntax errors. Got no VS installation in reach
double[] output = new double[tupleList.Length];

for(int i = 0; i < tupleList.Length; i++){
  output[i] = tupleList[i].Item1;
}

当然,像linq或任何使用lambdas的东西可能更现代。但我怀疑它是否更快或更节省内存。它必须使用某种类型的列表并从中创建一个数组。

这可以通过循环的基线来完成:

//Sorry for any Syntax errors. Got no VS installation in reach
double[] output = new double[tupleList.Length];

for(int i = 0; i < tupleList.Length; i++){
  output[i] = tupleList[i].Item1;
}

当然,像linq或任何使用lambdas的东西可能更现代。但我怀疑它是否更快或更节省内存。它必须使用某种类型的列表并从中创建一个数组。

谢谢。我怎样才能得到ArrayList?由于其他代码依赖性,我需要的正是这个typ.eIf如果您必须使用ArrayList,那么就有一个带有签名的构造函数。因此您可以像这样使用它:ArrayList firstValues=new ArrayListtupleList.Selectx=>x.Item1.ToList;嗯,真奇怪。您可以尝试将构造函数参数作为命名参数传递:new ArrayListc:tupleList.Selectx=>x.Item1.ToList;,也许这会迫使编译器使用特定的构造函数。对不起,我的错,这就是我删除注释的原因:我正在使用ikvm java到C代码迁移,而ArrayList类实际上是java.util.ArrayList,因此产生了混淆。谢谢你的帮助,不客气!如果这个答案对你有帮助,请考虑将它标记为支票。谢谢。我怎样才能得到ArrayList?由于其他代码依赖性,我需要的正是这个typ.eIf如果您必须使用ArrayList,那么就有一个带有签名的构造函数。因此您可以像这样使用它:ArrayList firstValues=new ArrayListtupleList.Selectx=>x.Item1.ToList;嗯,真奇怪。您可以尝试将构造函数参数作为命名参数传递:new ArrayListc:tupleList.Selectx=>x.Item1.ToList;,也许这会迫使编译器使用特定的构造函数。对不起,我的错,这就是我删除注释的原因:我正在使用ikvm java到C代码迁移,而ArrayList类实际上是java.util.ArrayList,因此产生了混淆。谢谢你的帮助,不客气!如果这个答案对你有帮助,请考虑将它标记为支票。