javascript C array.map #中的www.example.com()示例

xmq68pz9  于 2022-11-20  发布在  Java
关注(0)|答案(7)|浏览(126)

考虑以下常见的JavaScript构造
var ages = people.map(person => person.age);
给出所需的结果,即年龄数组。
在**C#**中,这个问题的等价形式是什么?请提供一个简单的例子。文档中指出select或可能的selectAll,但我在网上找不到一个例子或任何其他可以粘贴并有效的SO问题。
如果可能的话,给予一个例子,把下面的数组{1,2,3,4}变成下面的{'1a','2a','3a','4a'}。对于每个元素,在末尾加上“a”,把它从整数变成字符串。

cotxawn7

cotxawn71#

这叫做投影,在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));
6pp0gazn

6pp0gazn2#

仅供参考,如果peopleList<Person>,则ConvertAll方法非常类似于JS的map,例如:

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>,它要好得多!

j8ag8udp

j8ag8udp3#

集合上的LINQ扩展方法为您提供了大量非常方便的实用程序。Select就是其中之一:

int[] arr = { 1, 2, 3 };
IEnumerable<string> list = arr.Select(el => el + "a");
string[] arr2 = list.ToArray();

foreach (var str in arr2)
    Console.Write(str + " ");

这将输出:

1a 2a 3a

可以安全地将其浓缩为1-liner:

string[] arr2 = arr.Select(el => el + "a").ToArray();

工作示例:
https://ideone.com/mxxvfy
相关文档:
Enumerable.Select
Basic LINQ Query Operations (C#)

uemypmqf

uemypmqf4#

如果你不想执行与数组Array.ConvertAll的转换,可以将其转换为工作.它在System命名空间的Array类中声明(记住在文件顶部添加using System;)为:

public static TOutput[] ConvertAll<TInput,TOutput> (TInput[] array, Converter<TInput,TOutput> converter);

示例:

var items = new[] {"abc", "ab", "abcde"};

var result = Array.ConvertAll(items, p => p.Length);
            
Console.Out.WriteLine(string.Join(", ", result)); // Outputs 3, 2, 5

方法参考: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

e7arh2l6

e7arh2l65#

Linq的.Selectmap的等价物,而.Aggregatefold的等价物。

var nums = new[] {1,2,3,4};
string[] r = nums.Select(x => x + "a").ToArray();
jk9hmnmh

jk9hmnmh6#

您可以使用关键字fromselectinwhile;
或者以您为例:

var ages = (from person in people select person.age).ToArray();

所以基本上语法应该是:

<<list-output>> = (from <<var-name>> in <<list-input>> select <<operation>>);
6bc51xsx

6bc51xsx7#

// JS
Array.map(item=>{
Console.log(item)
}) 


// C# ::   
Array.ForEach(item => 
Console.Write(item)
)

相关问题