Csharp/CSharp Tutorial/LINQ/Index
Версия от 18:31, 26 мая 2010; (обсуждение)
Содержание
Query by position
<source lang="csharp">using System; using System.Collections; using System.Collections.Generic; using System.Text; using System.Linq; using System.Reflection; class Person {
int _id; int _idRole; string _lastName; string _firstName; public int ID { get { return _id; } set { _id = value; } } public int IDRole { get { return _idRole; } set { _idRole = value; } } public string LastName { get { return _lastName; } set { _lastName = value; } } public string FirstName { get { return _firstName; } set { _firstName = value; } }
} class Program {
static void Main(string[] args) { List<Person> people = new List<Person> { new Person { ID = 1, IDRole = 1, LastName = "A", FirstName = "B"}, new Person { ID = 2, IDRole = 2, LastName = "G", FirstName = "T"}, new Person { ID = 3, IDRole = 2, LastName = "G", FirstName = "M"}, new Person { ID = 4, IDRole = 3, LastName = "C", FirstName = "G"} }; var query = people.Select((p, index) => new { Position = index, p.FirstName, p.LastName }); }
}</source>
Select - Indexed: prints the value of the integer and whether it matches its index in the array
<source lang="csharp">using System; using System.Collections.Generic; using System.Linq; using System.Text; public class MainClass {
public static void Main() { int[] numbers = { 5, 4, 1, 3, 9}; var numsInPlace = numbers.Select((num, index) => new { Num = num, InPlace = (num == index) }); foreach (var n in numsInPlace) { Console.WriteLine("{0}: {1}", n.Num, n.InPlace); } }
}</source>
Use an indexed Where clause (where the length of the number"s name is shorter than its value)
<source lang="csharp">using System; using System.Collections.Generic; using System.Linq; using System.Text; public class MainClass {
public static void Main() { string[] digits = { "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine" }; var shortDigits = digits.Where((digit, index) => digit.Length < index); foreach (var d in shortDigits) { Console.WriteLine("The word {0} is shorter than its value.", d); } }
}</source>
Use index when querying array with LINQ
<source lang="csharp">using System; using System.Collections.Generic; using System.Linq; using System.Drawing; public class Book {
public String Title { get; set; } public override String ToString() { return Title; }
} class Program {
static public Book[] Books = { new Book {Title="F"}, new Book {Title="B"} }; static void Main(string[] args) { var books = Books .Select((book, index) => new { index, book.Title }) .OrderBy(book => book.Title); }
}</source>