Quantcast
Channel: 配列タグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 758

C#における、LINQと配列操作

$
0
0
LINQとは、コレクションの操作をするために用意された機能のことである。 ちなみに、LINQとは「Language Integrated Query」の略。 LINQを使う LINQを使うには、名前空間で using System.Ling; のようにusingディレクティブで指定する。 なお、以降使用するリストを var arrayData1 = new List<int>() { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; var arrayData2 = new List<int>() { 2, 3, 1, 4, 9, 6, 5, 10, 7, 8 }; var arrayData3 = = new List<Pokemon>() { new Pokemon() { Name = "リザードン", Types = new string[]{ "ほのお", "ひこう" } }, new Pokemon() { Name = "ピカチュウ", Types = new string[]{ "でんき" } }, new Pokemon() { Name = "メタグロス", Types = new string[]{ "はがね", "エスパー" } }, new Pokemon() { Name = "ゲッコウガ", Types = new string[]{ "みず", "あく" } }, new Pokemon() { Name = "ドラパルト", Types = new string[]{ "ドラゴン", "ゴースト" } }, new Pokemon() { Name = "エルレイド", Types = new string[]{ "エスパー", "かくとう" } }, new Pokemon() { Name = "ミュウツー", Types = new string[]{ "エスパー" } }, new Pokemon() { Name = "パルキア", Types = new string[]{ "みず", "ドラゴン" } }, new Pokemon() { Name = "マリルリ", Types = new string[]{ "みず", "フェアリー" } }, new Pokemon() { Name = "ゲンガー", Types = new string[]{ "ゴースト", "どく" } }, new Pokemon() { Name = "ボルケニオン", Types = new string[]{ "ほのお", "みず" } }, }; とする。 また、 Pokemonクラス class Pokemon { public string Name { get; set; } public string[] Types { get; set; } public bool IsGet { get; set; } public Pokemon(string name, string[] types, bool isGet) { Name = name; Types = types; IsGet = isGet; } } とする。 LINQで使えるメソッド LINQでできるコレクションを操作するメソッドは以下の通り Where Whereメソッドは、条件に一致した要素を取得する。 (例1)arrayData1から5以上の数字だけを表示したい時 var arrayDataByWhere = arrayData1.Where(el => el > 4); foreach(var item in arrayDataByWhere) { Console.WriteLine(item); } 出力結果 5 6 7 8 9 10 (例2)arrayData3の各要素のNameが4文字のデータを表示したい時 var PokemonData = arrayData3.Where(el => el.Name.Length == 4); foreach(var item in PokemonData) { Console.WriteLine(item.Name); } 出力結果 パルキア マリルリ ゲンガー Select Selectメソッドは、コレクションの各要素を別の値に変換する。 (例)arrayDataの各要素に2をかけた配列を新たに作りたい時 var arrayDataBySelect = arrayData1.Select(el => el * 2); foreach(var item in arrayDataBySelect) { Console.WriteLine(item); } 出力結果 2 4 6 8 10 12 14 16 18 20 OrderBy OrderByメソッドは、昇順に並び替えるメソッド。 (例)arrayData2を照準に並び替えたい時 var arrayDataBySelect = arrayData2.OrderBy(el => el); foreach(var item in arrayDataBySelect) { Console.WriteLine(item); } 出力結果 1 2 3 4 5 6 7 8 9 10 OrderByDecending OrderByメソッドは、降順に並び替えるメソッド。 (例1)arrayData2を降順に並び替えたい時 var arrayDataBySelect = arrayData2.OrderBy(el => el); foreach(var item in arrayDataBySelect) { Console.WriteLine(item); } 出力結果 10 9 8 7 6 5 4 3 2 1 (例2)arrayData3の要素の名前がカナ順になるように並び替えたい時 var arrayDataBySelect = arrayData3.OrderBy(el => el.Name); foreach(var item in arrayDataBySelect) { Console.WriteLine(item.Name); } 出力結果 エルレイド ゲッコウガ ゲンガー ドラパルト パルキア ピカチュウ ボルケニオン マリルリ ミュウツー メタグロス リザードン Enumerable Repeat 要素が1というint型の値を何個も持つコレクションもしくはListを作りたい場合などに使用する。 (例1)10個の1をListを作成する時 var data = Enumerable.Repeat(1, 10).ToList(); foreach (int i in data) { Console.WriteLine(i); } 出力結果 1 1 1 1 1 1 1 1 1 1 (例2)5個の1を配列で作成する時 var data = Enumerable.Repeat(1, 5).ToArray(); foreach (int i in data) { Console.WriteLine(i); } 出力結果 1 1 1 1 1 空の配列を定義して、forやforeachのループでやるより遥かに楽である。 Range コレクションに1,2,3...nと連続した値をセットしたい場合に使用する。 (例) var data11 = Enumerable.Range(1, 20).ToArray(); foreach (int i in data11) { Console.WriteLine(i); } Average コレクションの平均値を求める。 ちなみに、 ・要素がint型の数値だけがまとまったものの平均値を求める(A) ・オブジェクトの要素の数値だけを参照して平均値を求める(B) で使い方が異なるので注意。 (A)の求め方 var list = new List<int> { 1,2,3,4,5 }; Console.WriteLine(list.Average()); (B)の求め方の場合、 Personクラス public class Person { public string FirstName { get; set; } public string LastName { get; set; } public int Age { get; set; } public Person(string fn, string ln, int age) { FirstName = fn; LastName = ln; Age = age; } } があったとする。 (B)の求め方 List<Person> list2 = new List<Person>() { new Person("ジョルノ", "ジョバーナ", 15), new Person("ナルト", "うずまき", 17), new Person("一護", "黒崎", 17), new Person("義勇", "富岡", 21), new Person("月", "夜神", 20), new Person("リョーマ", "越前", 12), new Person("一馬", "桐生", 53), new Person("クラウド", "ストライフ", 24), new Person("葉", "麻倉", 13), new Person("威", "浅倉", 25), }; var ave = list2.Average(el => el.Age); Console.WriteLine(ave); 出力結果 21.7 この場合はラムダ式を使う。 Sum コレクションの合計を求める。 Averageと同じような記法で使用する (A)の求め方 list.Sum(); (B)の求め方 list2.Sum(el => el.Age); Min・Max コレクションの最大・最小値を求める。 Averageと同じような記法で使用する (A)の求め方 list.Max(); (B)の求め方 list2.Min(el => el.Age); ラムダ式 LINQで用意されているメソッドでは、「el => el > 4」というような、 「(変数) => (条件)」 の形式で書かれた部分のことをラムダ式といい、ラムダ式における「=>」をラムダ演算子という。 (変数)の名前は自由に決めていい。 elやres,req,valなど。 参考文献

Viewing all articles
Browse latest Browse all 758

Trending Articles