English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
以下の表はLINQで利用可能なすべてのSet演算子を示しています。
集合演算子 | 用法 |
---|---|
Distinct | 集合の非重複値を返します。 |
Except | 二つのシーケンスの差を返します。これは、一つの集合に存在するが、もう一つの集合に存在しない要素を意味します。 |
Intersect | 二つのシーケンスの集合の交差点を返します。これは、二つの集合に共通する要素を意味します。 |
Union | 二つのシーケンスのユニークな要素を返します。これは、二つのシーケンスに共通するユニークな要素を意味します。 |
Distinct拡張メソッドは、指定された集合から新しいユニークな要素集合を返します。
IList<string> strList = new List<string>(){ "One", "Two", "Three", "Two", "Three" }; IList<int> intList = new List<int>(){ 1, 2, 3, 2, 4, 4, 3, 5 }; var distinctList1 = strList.Distinct(); foreach (var str in distinctList1) Console.WriteLine(str); var distinctList2 = intList.Distinct(); foreach (var i in distinctList2) Console.WriteLine(i);
One Two Three 1 2 3 4 5
Distinct拡張メソッドは複雑なタイプのオブジェクトの値を比較しません。複雑なタイプの値を比較するには、IEqualityComparer<T>インターフェースを実装する必要があります。以下の例では、StudentComparerクラスがIEqualityComparer<Student>を実装してStudentオブジェクトを比較します。
public class Student { public int StudentID { get; set; } public string StudentName { get; set; } public int Age { get; set; } } class StudentComparer : IEqualityComparer<Student> { public bool Equals(Student x, Student y) { if (x.StudentID == y.StudentID && x.StudentName.ToLower() == y.StudentName.ToLower()) return true; return false; } public int GetHashCode(Student obj) { return obj.StudentID.GetHashCode(); } }
現在、Distinct()メソッドに上記のStudentComparerクラスのオブジェクトを引数として渡してStudentオブジェクトを比較することができます。例:C#でのDistinct比較オブジェクト
IList<Student> studentList = new List<Student>() { new Student() { StudentID = 1, StudentName = "John", Age = 18 }, new Student() { StudentID = 2, StudentName = "Steve", Age = 15 }, new Student() { StudentID = 3, StudentName = "Bill", Age = 25 }, new Student() { StudentID = 3, StudentName = "Bill", Age = 25 }, new Student() { StudentID = 3, StudentName = "Bill", Age = 25 }, new Student() { StudentID = 3, StudentName = "Bill", Age = 25 }, new Student() { StudentID = 5, StudentName = "Ron" , Age = 19 } }; var distinctStudents = studentList.Distinct(new StudentComparer()); foreach(Student std in distinctStudents) Console.WriteLine(std.StudentName);
John Steve Bill Ron
C# 検索構文は Distinct 演算子をサポートしません。しかし、Distinct メソッドを使用して変数を検索するか、全体の検索を括弧で囲んで Distinct () を呼び出すことができます。
VB.Net 検索構文で Distinct キーワードを使用:
Dim strList = New List(Of string) From {"One", "Three", "Two", "Two", "One"} Dim distinctStr = From s In strList _ Select s Distinct