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

时间:2015-10-05 23:28:52

标签: javascript c# arrays dictionary

考虑以下常见JavaScript构造

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

给出期望的结果,这是一系列年龄。

C#中的相应内容是什么?请举一个简单的例子。文档指出select或可能selectAll,但我找不到在线示例或任何其他可以粘贴并运行的SO问题。

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

6 个答案:

答案 0 :(得分:68)

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

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));

答案 1 :(得分:7)

仅对于信息,如果Locpeople,则List<Person>方法与JS的ConvertAll非常相似,例如:

map

但是如果你有一个数组而你想使用任何var ages = people.ConvertAll<int>(person => person.age); 方法,你可以通过将你的变量转换为数组中的List来轻松实现这一点,例如:

List<T>

最后,如果你确实需要一个Array,那么你可以将它转换回来,例如:

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

但是最后一个例子不如其他答案那么好,如果你只使用Arrays,你应该使用var ages = people.ToList().ConvertAll<int>(person => person.age).ToArray(); 。但如果可以的话,我建议您转到Select,它会好得多!

答案 2 :(得分:2)

集合上的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#)

答案 3 :(得分:1)

Linq的.Select是等效的map.Aggregate是等效的fold

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

答案 4 :(得分:0)

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

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

基本上语法是:

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

答案 5 :(得分:0)

如果您不想执行到/从数组的转换 Array.ConvertAll 可以到工作。它在 Array 命名空间的 System 类中声明(记得在文件顶部添加 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://docs.microsoft.com/en-us/dotnet/api/system.array.convertall?view=net-5.0

查看此部分以了解 .NET 版本兼容性:https://docs.microsoft.com/en-us/dotnet/api/system.array.convertall?view=net-5.0#applies-to