对每个数组元素执行函数,将结果返回给新数组
本文关键字:新数组 返回 数组 结果 数组元素 执行 函数 | 更新日期: 2023-09-27 18:13:13
我是一个完全的Linq新手,所以请原谅我问一个可能相当简单的问题。
我想对数组中的每个元素执行一个操作,并将每个操作的结果返回给一个新数组。
例如,假设我有一个数组或数字和一个ToWords()函数,该函数将数字转换为等效的单词,我希望能够传入数字数组,对每个元素执行ToWords()操作,并传递字符串[]
我知道这是完全可能的稍微冗长的方式,但在我的Linq冒险,我想知道它是否可以在一个漂亮的一行。
您可以使用Select()
将一个序列转换为另一个序列,ToArray()
从结果创建一个数组:
int[] numbers = { 1, 2, 3 };
string[] strings = numbers.Select(x => ToWords(x)).ToArray();
这很直接。只需使用Select
方法:
var results = array.Select(ToWords).ToArray();
请注意,除非您需要一个数组,否则您不必调用ToArray
。大多数情况下,您可以很容易地在IEnumerable<string>
上使用延迟求值。
有两种不同的方法-您可以使用选择扩展方法或您可以使用选择子句:
var numbers = new List<int>();
var strings1 = from num in numbers select ToWords(num);
var strings2 = numbers.Select(ToWords);
它们都将返回IEnumerable<>
,您可以根据需要强制转换(例如,使用.ToArray()
或.ToList()
)。
你可以这样做:
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()
。
列表比数组灵活得多,除了特殊情况,我认为没有理由不使用它们。