我在这里是一个完整的Linq新手,请原谅我一个非常简单的问题。
我想对数组中的每个元素执行一个操作,并将每个操作的结果返回给一个新数组。
例如,假设我有一个数组或一个函数ToWords()将数字转换为它们的单词等价物,我希望能够传入数字数组,对每个元素执行ToWords()操作,并传出一个字符串[]
我知道这完全有可能以一种稍微冗长的方式,但在我的Linq冒险中,我想知道它是否可以用一个漂亮的单行。
答案 0 :(得分:7)
这很直接。只需使用Select
方法:
var results = array.Select(ToWords).ToArray();
请注意,除非您需要阵列,否则您不必致电ToArray
。大多数情况下,您可以轻松地在IEnumerable<string>
上使用延迟评估。
答案 1 :(得分:6)
您可以使用Select()
将一个序列转换为另一个序列,并使用ToArray()
从结果中创建一个数组:
int[] numbers = { 1, 2, 3 };
string[] strings = numbers.Select(x => ToWords(x)).ToArray();
答案 2 :(得分:0)
有两种不同的方法 - 您可以使用Select扩展方法,也可以使用select clause:
var numbers = new List<int>();
var strings1 = from num in numbers select ToWords(num);
var strings2 = numbers.Select(ToWords);
他们都将返回IEnumerable<>
,您可以根据需要投放.ToArray()
(例如,使用.ToList()
或{{1}})。
答案 3 :(得分:0)
你可以这样做:
public static string[] ProcessStrings(int[] intList)
{
return Array.ConvertAll<int, string>(intList, new Converter<int, string>(
delegate(int number)
{
return ToWords();
}));
}
如果是列表,那么:
public static List<string> ProcessStrings(List<int> intList)
{
return intList.ConvertAll<string>(new Converter<int, string>(
delegate(int number)
{
return ToWords();
}));
}
答案 4 :(得分:0)
直接简单:
string[] wordsArray = array.ToList().ConvertAll(n => ToWords(n)).ToArray();
如果你对列表而不是数组没问题,可以跳过ToList()
和ToArray()
。
列表比数组更灵活,除了特定情况外,我认为没有理由不使用它们。