Csharp/CSharp Tutorial/LINQ/Index

Материал из .Net Framework эксперт
Перейти к: навигация, поиск

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>