C# 中的 array.map() 示例?

2022-08-30 05:14:36

考虑以下常见的 JavaScript 构造

var ages = people.map(person => person.age);

给出所需的结果,这是一系列年龄。

C# 中,这相当于什么?请举一个简单的例子。文档指示或可能,但我无法在线找到示例或任何其他可以粘贴并工作的SO问题。selectselectAll

如果可能,请给出一个示例,将以下数组转换为以下数组。对于每个元素,将“a”附加到末尾,将其从整数转换为字符串。{1,2,3,4}{'1a','2a','3a','4a'}


答案 1

这称为投影,在 LINQ 中称为投影。这不会返回一个新数组(就像JavaScript那样),而是一个.您可以使用 将其转换为数组。Select.mapIEnumerable<T>.ToArray

using System.Linq; // Make 'Select' extension available
...
var ages = people.Select(person => person.Age).ToArray();

Select适用于所有数组实现。您只需要 .NET 3.5 和一个语句。IEnumerable<T>using System.Linq;

对于第二个示例,请使用类似如下的内容。请注意,没有正在使用的数组 - 只有序列。

 var items = Enumerable.Range(1, 4).Select(num => string.Format("{0}a", num));

答案 2

仅对于信息,如果 是 ,则该方法与 JS 的方法非常相似,例如:peopleList<Person>ConvertAllmap

var ages = people.ConvertAll<int>(person => person.age);

但是,如果你有一个数组,并且你想使用任何方法,你可以通过将变量转换为数组中的列表来轻松实现这一目标,例如:List<T>

var ages = people.ToList().ConvertAll<int>(person => person.age);

最后,如果你真的需要一个 Array 回来,那么你可以把它转换回来,例如:

var ages = people.ToList().ConvertAll<int>(person => person.age).ToArray();

但是最后一个示例不如其他答案好,如果您只使用数组,则应使用。但如果可以的话,我建议你搬到,那就好多了!SelectList<T>