Listから条件に適応するものだけを抽出したい
皆さん
こんにちは、こんばんは
TomoProgです。
気がつけば2ヶ月ほどブログ更新していなかった!!
まぁいつもどおりあまり気にせず、ゆるく更新していきたいと思います。
今回はC#にて、List型から条件に適応するものを抽出するにはどうしたらいいのだろう?
ということで調べてみました。
それでは頑張っていきましょう。
素直にすべて走査して抽出する
Listの中身をすべて走査して、条件に合うものを抽出していきます。
using System; using System.Collections.Generic; namespace console { class Student { public string name { get; } public int score { get; } public Student(string name, int score) { this.name = name; this.score = score; } } class MainClass { public static void Main(string[] args) { List<Student> studentList = new List<Student>(); // リストに生徒を追加 studentList.Add(new Student("Tanaka", 60)); studentList.Add(new Student("Sato", 70)); studentList.Add(new Student("Aoki", 60)); // 70点未満の生徒のリストを作成 List<Student> selectedList = new List<Student>(); foreach (Student s in studentList) { if (s.score < 70) { selectedList.Add(s); } } // 作成したリストの内容を出力 foreach (Student s in selectedList) { Console.WriteLine("Name:{0} Score:{1}" , s.name, s.score); } } } }
実行結果: Name:Tanaka Score:60 Name:Aoki Score:60
Linqを使って抽出する
Listから条件に適応するものだけを抽出する際は、
LinqというC#独自の技術を使うと
先ほど書いたプログラムよりも圧倒的にキレイに書くことが出来ます。
using System; using System.Collections.Generic; using System.Linq; namespace console { class Student { public string name { get; } public int score { get; } public Student(string name, int score) { this.name = name; this.score = score; } } class MainClass { public static void Main(string[] args) { List<Student> studentList = new List<Student>(); // リストに生徒を追加 studentList.Add(new Student("Tanaka", 60)); studentList.Add(new Student("Sato", 70)); studentList.Add(new Student("Aoki", 60)); // 70点未満の生徒のリストを作成 var selectedList = from x in studentList where x.score < 70 select x; // 作成したリストの内容を出力 foreach (Student s in selectedList) { Console.WriteLine("Name:{0} Score:{1}" , s.name, s.score); } } } }
実行結果: Name:Tanaka Score:60 Name:Aoki Score:60
70点未満の生徒のリストを作成するところが先ほどのプログラムと違うことがわかると思います。
Linqを使えばSQL文を発行するようにList型から条件に適応するものだけを抽出することが出来ます。
まとめ
今日はListから条件に適応するものだけを抽出するということで、
2つの方法を紹介しました。
どちらの方法でも結果は同じですが、
Linqを使った方が綺麗にコードが書けて可読性も高まると感じました。
C#使うときは積極的に使っていこうと思います。
それではまた。
TomoProg