3

私はここでは完全なLinq初心者なので、おそらく非常に単純な質問を許してください。

配列内のすべての要素に対して操作を実行し、これらの各操作の結果を新しい配列に返したいと考えています。

たとえば、配列または数値と、数値を対応する単語に変換する関数 ToWords() があるとします。数値配列を渡し、各要素に対して ToWords() 操作を実行し、出力できるようにしたいと考えています。文字列[]

少し冗長な方法でそれが完全に可能であることは知っていますが、Linq の冒険では、素敵なワンライナーで実行できるかどうか疑問に思っています。

4

5 に答える 5

7

を使用Select()して、あるシーケンスを別のシーケンスに変換ToArray()し、結果から配列を作成できます。

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

それはかなり簡単です。メソッドを使用するだけSelectです:

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

配列が必要でない限り、呼び出す必要がないことに注意してくださいToArray。ほとんどの場合、遅延評価をIEnumerable<string>同様に簡単に使用できます。

于 2013-05-13T10:48:30.673 に答える
0

Select拡張メソッドを使用するか、select 句を使用することができます。

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

どちらも を返しIEnumerable<>ます。これは、必要に応じてキャストできます (たとえば、.ToArray()またはを使用.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 に答える