次の一般的なJavaScriptコンストラクトを検討してください
var ages = people.map(person => person.age);
年齢の配列である望ましい結果を与える。
C#でこれに相当するものは何ですか?簡単な例を含めてください。ドキュメントにはselect
または可能性のあるselectAll
が示されていますが、オンラインまたは他のSO質問を貼り付けて機能する質問)の例を見つけることができません。
可能であれば、次の配列{1,2,3,4}
を次の{'1a','2a','3a','4a'}
。各要素について、末尾に「a」を追加し、整数から文字列に変換します。
これは、LINQではSelect
と呼ばれるプロジェクションと呼ばれます。これは、JavaScriptの.map
のように新しい配列を返しませんが、IEnumerable<T>
を返します。 .ToArray
で配列に変換できます。
var ages = people.Select(person => person.Age).ToArray();
Select
は、配列が実装するすべてのIEnumerable<T>
で機能します。 .NET 3.5とusing System.Linq;
ステートメントが必要です。
2番目の例では、このようなものを使用します。使用中の配列はありません-シーケンスのみです。
var items = Enumerable.Range(1, 4).Select(num => string.Format("{0}a", num));
情報についてのみ、people
がList<Person>
である場合、ConvertAll
メソッドはJSのmap
と非常に似ています。
var ages = people.ConvertAll<int>(person => person.age);
ただし、配列があり、List<T>
メソッドを使用する場合は、変数を配列からリストに変換することで簡単に実現できます。例:
var ages = people.ToList().ConvertAll<int>(person => person.age);
そして最後に、本当に配列を戻す必要がある場合、それを元に戻すことができます、例えば:
var ages = people.ToList().ConvertAll<int>(person => person.age).ToArray();
しかし、その最後の例は他の回答ほど良くはないので、配列のみで作業している場合はSelect
を使用する必要があります。しかし、可能であれば、List<T>
に移行することをお勧めします。
コレクションのLINQ拡張メソッドは、本当に便利なユーティリティのホストを提供します。 Select
はそれらの1つです。
int[] arr = { 1, 2, 3 };
IEnumerable<string> list = arr.Select(el => el + "a");
string[] arr2 = list.ToArray();
foreach (var str in arr2)
Console.Write(str + " ");
これは出力するはずです:
1a 2a 3a
これは安全に1ライナーに凝縮できます。
string[] arr2 = arr.Select(el => el + "a").ToArray();
実例:
関連ドキュメント:
Linqの.Select
はmap
に相当し、.Aggregate
はfold
と同等です。
var nums = new[] {1,2,3,4};
string[] r = nums.Select(x => x + "a").ToArray();
キーワードfrom
、select
、in
およびwhile
を使用できます。
または例:
var ages = (from person in people select person.age).ToArray();
したがって、基本的に構文は次のようになります。
<<list-output>> = (from <<var-name>> in <<list-input>> select <<operation>>);