Csharp/CSharp Tutorial/LINQ/Index

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

Query by position

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 });
    }
}

Select - Indexed: prints the value of the integer and whether it matches its index in the array

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);
        }
    }
}

Use an indexed Where clause (where the length of the number"s name is shorter than its value)

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);
        }
    }
}

Use index when querying array with LINQ

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);
    }
}