对每个数组元素执行函数,将结果返回给新数组

本文关键字:新数组 返回 数组 结果 数组元素 执行 函数 | 更新日期: 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()

列表比数组灵活得多,除了特殊情况,我认为没有理由不使用它们。