Csharp/CSharp Tutorial/LINQ/ToLookup
Содержание
Call ILookUp returned from ToLookup to get the IEnumerable
<source lang="csharp">using System; using System.Linq; using System.Collections; using System.Collections.Generic; public class Employee {
public string birthYear; public string firstName; public string lastName; public static Employee[] GetEmployees() { Employee[] actors = new Employee[] { new Employee { birthYear = "1964", firstName = "K", lastName = "R" }, new Employee { birthYear = "1968", firstName = "O", lastName = "W" }, new Employee { birthYear = "1960", firstName = "J", lastName = "S" }, new Employee { birthYear = "1965", firstName = "S",lastName = "B" }, }; return (actors); }
} public class MyStringifiedNumberComparer : IEqualityComparer<string> {
public bool Equals(string x, string y) { return (Int32.Parse(x) == Int32.Parse(y)); } public int GetHashCode(string obj) { return Int32.Parse(obj).ToString().GetHashCode(); }
} public class MainClass {
public static void Main() { ILookup<string, string> lookup = Employee.GetEmployees() .ToLookup(k => k.birthYear,a => string.Format("{0} {1}", a.firstName, a.lastName),new MyStringifiedNumberComparer()); IEnumerable<string> actors = lookup["1965"]; foreach (var actor in actors) Console.WriteLine("{0}", actor); }
}</source>
ToLookup Demo
<source lang="csharp">using System; using System.Linq; using System.Collections; using System.Collections.Generic; public class Employee {
public string birthYear; public string firstName; public string lastName; public static Employee[] GetActors() { Employee[] actors = new Employee[] { new Employee { birthYear = "1964", firstName = "K", lastName = "R" }, new Employee { birthYear = "1968", firstName = "O", lastName = "W" }, new Employee { birthYear = "1960", firstName = "J", lastName = "S" }, new Employee { birthYear = "1964", firstName = "S",lastName = "B" }, }; return (actors); }
} public class MyStringifiedNumberComparer : IEqualityComparer<string> {
public bool Equals(string x, string y) { return (Int32.Parse(x) == Int32.Parse(y)); } public int GetHashCode(string obj) { return Int32.Parse(obj).ToString().GetHashCode(); }
} public class MainClass {
public static void Main() { ILookup<string, Employee> lookup = Employee.GetActors() .ToLookup(k => k.birthYear, new MyStringifiedNumberComparer()); IEnumerable<Employee> actors = lookup["1968"]; foreach (var actor in actors) Console.WriteLine("{0} {1}", actor.firstName, actor.lastName); }
}</source>
ToLookup with int and string
<source lang="csharp">using System; using System.Linq; using System.Collections; using System.Collections.Generic; public class Employee {
public int birthYear; public string firstName; public string lastName; public static Employee[] GetEmployees() { Employee[] actors = new Employee[] { new Employee { birthYear = 1964, firstName = "K", lastName = "R" }, new Employee { birthYear = 1968, firstName = "O", lastName = "W" }, new Employee { birthYear = 1960, firstName = "J", lastName = "S" }, new Employee { birthYear = 1964, firstName = "S", lastName = "B" }, }; return (actors); }
} public class MainClass {
public static void Main() { ILookup<int, string> lookup = Employee.GetEmployees() .ToLookup(k => k.birthYear, a => string.Format("{0} {1}", a.firstName, a.lastName)); IEnumerable<string> actors = lookup[1964]; foreach (var actor in actors) Console.WriteLine("{0}", actor); }
}</source>
Use ToLookup to search object property
<source lang="csharp">using System; using System.Linq; using System.Collections; using System.Collections.Generic; public class Employee {
public int birthYear; public string firstName; public string lastName; public static Employee[] GetEmployees() { Employee[] actors = new Employee[] { new Employee { birthYear = 1964, firstName = "K", lastName = "R" }, new Employee { birthYear = 1968, firstName = "O", lastName = "W" }, new Employee { birthYear = 1960, firstName = "J", lastName = "S" }, new Employee { birthYear = 1964, firstName = "S", lastName = "B" }, }; return (actors); }
} public class MainClass {
public static void Main() { ILookup<int, Employee> lookup = Employee.GetEmployees().ToLookup(k => k.birthYear); IEnumerable<Employee> actors = lookup[1964]; foreach (var actor in actors) Console.WriteLine("{0} {1}", actor.firstName, actor.lastName); }
}</source>