家には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