在每个数组元素上执行函数,将结果返回到新数组

时间:2013-05-13 10:46:45

标签: c# .net arrays linq

我在这里是一个完整的Linq新手,请原谅我一个非常简单的问题。

我想对数组中的每个元素执行一个操作,并将每个操作的结果返回给一个新数组。

例如,假设我有一个数组或一个函数ToWords()将数字转换为它们的单词等价物,我希望能够传入数字数组,对每个元素执行ToWords()操作,并传出一个字符串[]

我知道这完全有可能以一种稍微冗长的方式,但在我的Linq冒险中,我想知道它是否可以用一个漂亮的单行。

5 个答案:

答案 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()

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