JavaScript 屋さんのための C# LINQ 入門 (2) map / Select
こんにちは、kenzauros です。
連載 2 回目。今回は filter と同じくらい頻繁に使うであろう map 関数です。このような操作は数学的には「写像」とか「射影」とか呼ばれます。
各要素を変換する(写像・射影)
map 関数は Select メソッドで置き換えできる
JavaScript では map です。別の配列にマッピングするという動作ですね。
var ages = people.map(function (p) { return p.age + "歳"; });
let ages = people.filter(p => p.age + "歳"); // ES2015
こんな感じに書けば “歳” つきの年齢リストが取得できます。
さて、C#(LINQ) では map の代わりに Select を用います。これも SQL と似ていますね。
var ages = people.Select(p => p.age.ToString() + "歳");
C# の場合は静的型付けですので、数値型を文字列と結合するときは ToString() が必須です。
インデックスも取得できるタイプ
前回の filter 関数と同様、map 関数もコールバックの第 2 引数を使って配列のインデックスが取得できます。
var nameList = people.map(function (p, index) { return index + "番 = " + p.name; });
let nameList = people.map((p, index) => index + "番 = " + p.name); // ES2015
たとえばこんな感じでインデックスを使った操作ができます。
LINQ にも同様の実装があり、インデックスを取得することができます。
var nameList = people.Select((p, index) => index.ToString() + "番 = " + p.name);
まとめ
JavaScript の map
= C# (LINQ) の Select
!!