Listのメソッド。Scalaの場合とC#での書き方の違い。

あまり対比させるのは良くないと思いつつ。ただLinqは無しで。なぜって、僕の仕事環境ではLinqはまだ使えないからですよ!悔しいからですよ!

対比表

条件 Scala C#
生成 val list = List("a", "b", "aa", "bb", "ccc") var list = new List() { "a", "b", "aa", "bb", "ccc" };
アクセス list(1) list[1]
特定条件の要素数 list.count(s => s.length == 2) 無い
先頭の特定要素数を削除したリストを取得 val list2 = list.drop(2) list.RemoveRange(0,2)
末尾の特定要素数を削除したリストを取得 val list3 = list.dropRight(2) list.RemoveRange(list.Count - 2, 2) // 無理やり
特定の要素が存在するか確認 list.exists(s => s == "aa") list.Exists(s => s.Equals("aa"))
特定の条件を満たすリストを取得 val list4 = list.filter(s => s.length == 2) list.FindAll(s => s.Length == 2)
全ての要素が特定の条件を満たしているか list.forall(s => s.endsWith("b")) list.TrueForAll(s => s.EndsWith("b"))
全ての要素に大して処理を実行 list.foreach(s => println(s)) list.ForEach(s => Console.WriteLine(s))
先頭要素を返す val list5 = list.head 無い
末尾を覗いた残りの要素を返す val list6 = list.init 無い
リストが空かどうか list.isEmpty 無い
素数を返す list.length list.Count
最後の要素を返す list.last 無い
全ての要素に処理を施したリストを取得 val list7 = list.map(s => s + "y") list.ConvertAll(s => s + "y")
リストの要素を並べた文字列を作る list.mkString(", ") 無い
特定条件の要素を全て削除したリストを取得 val list8 = list.remove(s => s.length == 2) list.RemoveAll(s => s.Length == 2)
要素全て逆順に並び替え val list9 = list.reverse list.Reverse()
特定条件にソートしたリストを取得 val list10 = list.sort((s, t) => s.length - t.length < 0) list.Sort((s, t) => s.Length - t.Length)
先頭要素以外のリストを取得 val list11 = list.tail 無い

書いてみたものの

やはりイミュータブルなScalaのListとミュータブルなC#のリストでは用途も少し変わってくるので違いは当然でるよねって話。ただ、こう対比してみて思うのは、C#の記法って3.0になってから本当に柔軟になったなと実感。素晴らしい。