今回は、配列とList
配列とList
この章ではLINQのさらに詳しい使い方も説明してくれるらしいので、頑張ります。
要素の設定
配列あるいは、List
// List<T>(要素数:20個)の値を-1で埋める var numbers = Enumerable.Repeat(-1, 20).ToList(); // 配列(要素数:12個)の値をunknownで埋める var strings = Enumerable.Repeat("(unknown)", 12).ToArray();
配列あるいは、List
// 配列に1〜20の値を設定 var array = Enumerable.Range(1, 20).ToArray();
コレクションの集計
平均値の求め方。
var numbers = new List<int>{9, 7, 5, 4, 2, 5, 4, 0, 4, 1, 0, 4}; var average = numbers.Average(); // 合計の求め方 var sum = numbers.Sum();
最小値、最大値の求め方。
var numbers = new List<int>{9, 7, 5, 4, 2, 5, 4, 0, 4, 1, 0, 4}; var min = numbers.Where(n => n > 0).Min(); var max = numbers.Where(n => n > 0).Max();
条件に一致する要素をカウントする。
var count = numbers.Count(n => n == 0);
コレクションの判定
条件に一致する要素があるかどうか調べる。
Anyメソッドは、条件に一致する要素が見つかった時点で要素の取得を中止する。
bool exists = numbers.Any(n => n % 7 == 0);
コレクション内のすべての要素が条件を満たしているかどうかを調べる。
bool isAllPositive = numbers.All(n => n > 0);
2つのコレクションの要素が等しいか調べる。
bool equal = numbers1.SequenceEqual(numbers2);
単一の要素の取得
条件に一致する最初、または最後の要素を取得する。
var word = words.FirstOrDefault(x => x.Length == 4); var word = words.LastOrDefault(x => x.Length == 4);
条件に一致する最初、または最後のインデックスを求める。
var index = numbers.FindIndex(n => n < 0); var index = numbers.FindLastIndex(n => n < 0);
複数の要素の取得
条件を満たす要素をn個取り出す。
var results = numbers.Where(n => n > 0).Take(5);
コレクションの中から、条件を満たしている間だけ要素を取り出す。
例として、400, 281, 389, 637, 411というリストがあった場合、600以下という条件をつけたら、先頭の400、281、389だけ取れるというもの。
var selected = books.TakeWhile(x => x.Price < 600);
では逆に、条件を満たしている間だけ要素を読み飛ばすには、SkipWhile演算子を使う。
var selected = numbers.SkipWhile(n => n >= 0).ToList();
その他の処理
コレクションから別のコレクションを生成する。
基本的には、ToArray()、ToList()メソッドを使用する。
var words = new List<string>{"Microsoft", "Apple", "Google", "Oracle", }; var lowers = words.Select(name => name.ToLower()).ToArray();
重複を排除する。
var result = numbers.Distinct();
コレクションを並び替える。
// 昇順にソート var sorteBooks = books.OrderBy(x => x.Price); // 降順にソート var sortedBooks = books.OrderByDescending(x => x.Price);
2つのコレクションを連結する。
var allfiles = files1.Concat(file2);