Csharp/C Sharp/LINQ/Index
Содержание
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);
}
}