考虑以下常见的JavaScript构造var ages = people.map(person => person.age);
给出所需的结果,即年龄数组。
在**C#**中,这个问题的等价形式是什么?请提供一个简单的例子。文档中指出select
或可能的selectAll
,但我在网上找不到一个例子或任何其他可以粘贴并有效的SO问题。
如果可能的话,给予一个例子,把下面的数组{1,2,3,4}
变成下面的{'1a','2a','3a','4a'}
。对于每个元素,在末尾加上“a”,把它从整数变成字符串。
7条答案
按热度按时间cotxawn71#
这叫做投影,在LINQ中叫做
Select
。它不会返回一个新的数组(像JavaScript的.map
那样),而是一个IEnumerable<T>
。你可以用.ToArray
将它转换成一个数组。Select
适用于数组实现的所有IEnumerable<T>
。您只需要.NET 3.5和一个using System.Linq;
语句。对于你的第二个例子,使用类似这样的东西。注意在只使用的序列中没有数组。
6pp0gazn2#
仅供参考,如果
people
是List<Person>
,则ConvertAll
方法非常类似于JS的map
,例如:但是如果你有一个数组,并且你想使用任何
List<T>
方法,你可以很容易地通过将你的变量从数组转换为列表来实现,例如:最后,如果你真的需要一个数组,那么你可以把它转换回来,例如:
但是最后一个例子不如其他答案好,如果你只使用数组,你应该使用
Select
。但是如果可以的话,我建议你转移到List<T>
,它要好得多!j8ag8udp3#
集合上的LINQ扩展方法为您提供了大量非常方便的实用程序。
Select
就是其中之一:这将输出:
可以安全地将其浓缩为1-liner:
工作示例:
https://ideone.com/mxxvfy
相关文档:
Enumerable.Select
Basic LINQ Query Operations (C#)
uemypmqf4#
如果你不想执行与数组
Array.ConvertAll
的转换,可以将其转换为工作.它在System
命名空间的Array
类中声明(记住在文件顶部添加using System;
)为:示例:
方法参考:https://learn.microsoft.com/en-us/dotnet/api/system.array.convertall?view=net-5.0
请查看此部分以了解.NET版本的兼容性:https://learn.microsoft.com/en-us/dotnet/api/system.array.convertall?view=net-5.0#applies-to
e7arh2l65#
Linq的
.Select
是map
的等价物,而.Aggregate
是fold
的等价物。jk9hmnmh6#
您可以使用关键字
from
、select
、in
和while
;或者以您为例:
所以基本上语法应该是:
6bc51xsx7#