3

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

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

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

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

4

5 回答 5

7

这很简单。只需使用以下Select方法:

var results = array.Select(ToWords).ToArray();

请注意,除非您需要一个数组,否则您不必调用ToArray. 大多数情况下,您可以轻松地使用惰性求值IEnumerable<string>

于 2013-05-13T10:48:30.673 回答
7

您可以使用Select()将一个序列转换为另一个序列,并ToArray()根据结果创建一个数组:

int[] numbers = { 1, 2, 3 };
string[] strings = numbers.Select(x => ToWords(x)).ToArray();
于 2013-05-13T10:48:37.640 回答
0

有两种不同的方法 - 您可以使用Select扩展方法,也可以使用select 子句

var numbers = new List<int>();
var strings1 = from num in numbers select ToWords(num);
var strings2 = numbers.Select(ToWords);

它们都将返回IEnumerable<>,您可以根据需要进行投射(例如,使用.ToArray()or .ToList())。

于 2013-05-13T10:53:52.347 回答
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();
         }));
    }
于 2013-05-13T10:55:49.353 回答
0

直接简单:

string[] wordsArray = array.ToList().ConvertAll(n => ToWords(n)).ToArray();

如果您可以使用列表而不是数组,则可以跳过ToList()ToArray()

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

于 2013-05-13T11:05:09.103 回答