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

新手上路,请多包涵

考虑以下常见的 JavaScript 构造

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

给出期望的结果,这是一个年龄数组。

这在 C# 中的等效项是什么?请包括一个简单的例子。文档指示 select 或可能的 selectAll 但我找不到在线示例或任何其他可以粘贴和工作的 SO 问题。

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

原文由 Code Whisperer 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 780
2 个回答

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

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

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

对于你的第二个例子,使用这样的东西。请注意,没有使用数组——只有序列。

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

原文由 Daniel A. White 发布,翻译遵循 CC BY-SA 4.0 许可协议

Only for info, if people is a List<Person> , the ConvertAll method is pretty similar to JS’s map , eg:

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

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

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

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

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

但是最后一个例子不如其他答案好,如果你只使用数组,你应该使用 Select 。但是如果可以,我建议你搬到 List<T> ,这样会好很多!

原文由 Buzinas 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题