我在这里是一个完整的 Linq 新手,所以请原谅我提出一个可能非常简单的问题。
我想对数组中的每个元素执行一个操作,并将每个操作的结果返回到一个新数组。
例如,假设我有一个或多个数字和一个函数 ToWords() 将数字转换为它们的等效单词,我希望能够传入数字数组,对每个元素执行 ToWords() 操作,然后传递出去一个字符串[]
我知道这完全有可能以稍微冗长的方式,但在我的 Linq 冒险中,我想知道它是否可以在一个不错的单行中实现。
这很简单。只需使用以下Select
方法:
var results = array.Select(ToWords).ToArray();
请注意,除非您需要一个数组,否则您不必调用ToArray
. 大多数情况下,您可以轻松地使用惰性求值IEnumerable<string>
。
你可以做这样的事情:
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();
}));
}
直接简单:
string[] wordsArray = array.ToList().ConvertAll(n => ToWords(n)).ToArray();
如果您可以使用列表而不是数组,则可以跳过ToList()
和ToArray()
。
列表比数组灵活得多,除了特定情况外,我认为没有理由不使用它们。