家にはmacとchromebookしかないのでc#とは関わりがないのですが
会社に行くとc#を書くお仕事なので、c#の特徴でもあるLINQについて調べたことをjsと比較しながら学びたいと思います
LINQの種類
メソッド式
var ary = {1, 2, 3};
var result = ary.Where(x => x % 2 == 0).Select(x => x * 2);
Console.WriteLine(result);//=> [4]
以下のように改行してもいい
var result = ary
.Where(x => x % 2 == 0)
.Select(x => x * 2);
クエリ式
var ary = {1, 2, 3};
var result = (from x in ary where x % 2 == 0 select x * 2);
Console.WriteLine(result);//=> [4]
()で囲む必要はないが書いてた方が見やすい気がする
囲わないとこんな感じ
var result = from x in ary where x % 2 == 0 select x * 2;
これも改行してもちゃんと動く
var result = from x in ary where x % 2 == 0 select x * 2;
js arrayメソッド対応表
| javascript | c# |
|---|---|
| map | Select |
| filter | Where |
| reduce | Aggregate |
| forEach |
LinqのメソッドにforEachはない
Linq style “For Each” - Stack Overflowによると、ToListでListに変換してからList#ForEachを使うとできる
しかしToListでListに変換するのは効率が良くないので、できれば Reactive を使って実装するのが良いらしい
Aggregate(reduce)の使い方
aggregate
【動詞】【他動詞】
〈…を〉集合する,集める,集団とする.
【自動詞】
1 集まる.
2〔+補語〕総計〈…と〉なる.
(引用: weblio)
「配列の要素を全部足す」のような集約をするための関数
型定義
public static TAccumulate Aggregate<TSource, TAccumulate>( this IEnumerable<TSource> source, TAccumulate seed, Func<TAccumulate, TSource, TAccumulate> func )
(引用: Enumerable.Aggregate - MSDN)
実行例
var ary = {1, 2, 3};
var result = ary.Aggregate(0, (sum, x) => sum + x);
Console.WriteLine(result);//=> 6
var result2 = ary.Aggregate(4, (sum, x) => sum + x);
Console.WriteLine(result2);//=> 10