Enumerable.Select Metoda

Definice

Promítá každý prvek sekvence do nového formuláře.

Přetížení

Select<TSource,TResult>(IEnumerable<TSource>, Func<TSource,Int32,TResult>)

Projektuje každý prvek sekvence do nové podoby začleněním indexu elementu.

Select<TSource,TResult>(IEnumerable<TSource>, Func<TSource,TResult>)

Promítá každý prvek sekvence do nového formuláře.

Select<TSource,TResult>(IEnumerable<TSource>, Func<TSource,Int32,TResult>)

Projektuje každý prvek sekvence do nové podoby začleněním indexu elementu.

public:
generic <typename TSource, typename TResult>
[System::Runtime::CompilerServices::Extension]
 static System::Collections::Generic::IEnumerable<TResult> ^ Select(System::Collections::Generic::IEnumerable<TSource> ^ source, Func<TSource, int, TResult> ^ selector);
public static System.Collections.Generic.IEnumerable<TResult> Select<TSource,TResult> (this System.Collections.Generic.IEnumerable<TSource> source, Func<TSource,int,TResult> selector);
static member Select : seq<'Source> * Func<'Source, int, 'Result> -> seq<'Result>
<Extension()>
Public Function Select(Of TSource, TResult) (source As IEnumerable(Of TSource), selector As Func(Of TSource, Integer, TResult)) As IEnumerable(Of TResult)

Parametry typu

TSource

Typ prvků objektu source.

TResult

Typ hodnoty vrácené parametrem selector.

Parametry

source
IEnumerable<TSource>

Posloupnost hodnot, na které se má vyvolat transformační funkce.

selector
Func<TSource,Int32,TResult>

Transformační funkce, která se použije na každý zdrojový prvek; druhý parametr funkce představuje index zdrojového prvku.

Návraty

IEnumerable<TResult>

Objekt, IEnumerable<T> jehož prvky jsou výsledkem vyvolání transformační funkce u každého prvku objektu source.

Výjimky

source nebo selector je null.

Příklady

Následující příklad kódu ukazuje, jak použít Select<TSource,TResult>(IEnumerable<TSource>, Func<TSource,Int32,TResult>) k promítání na sekvenci hodnot a použití indexu každého prvku.

string[] fruits = { "apple", "banana", "mango", "orange",
                      "passionfruit", "grape" };

var query =
    fruits.Select((fruit, index) =>
                      new { index, str = fruit.Substring(0, index) });

foreach (var obj in query)
{
    Console.WriteLine("{0}", obj);
}

/*
 This code produces the following output:

 {index=0, str=}
 {index=1, str=b}
 {index=2, str=ma}
 {index=3, str=ora}
 {index=4, str=pass}
 {index=5, str=grape}
*/
' Create an array of strings.
Dim fruits() As String =
{"apple", "banana", "mango", "orange", "passionfruit", "grape"}

' Project each item in the array to an anonymous type
' that stores the item's index in the array and
' a substring of each item whose length is equal
' to the index position in the original array.
Dim query =
fruits.Select(Function(fruit, index) _
                  New With {index, .Str = fruit.Substring(0, index)})

Dim output As New System.Text.StringBuilder
For Each obj In query
    output.AppendLine(obj.ToString())
Next

' Display the output.
Console.WriteLine(output.ToString())

' This code produces the following output:
'
' { index = 0, Str =  }
' { index = 1, Str = b }
' { index = 2, Str = ma }
' { index = 3, Str = ora }
' { index = 4, Str = pass }
' { index = 5, Str = grape }

Poznámky

Tato metoda se implementuje pomocí odloženého spuštění. Okamžitá návratová hodnota je objekt, který ukládá všechny informace potřebné k provedení akce. Dotaz reprezentovaný touto metodou není proveden, dokud objekt není výčet buď voláním jeho GetEnumerator metody přímo, nebo pomocí foreach v jazyce Visual C# nebo For Each v jazyce Visual Basic.

První argument selector představuje prvek, který se má zpracovat. Druhý argument selector představuje index od nuly tohoto prvku ve zdrojové sekvenci. To může být užitečné, pokud jsou prvky ve známém pořadí a chcete například něco udělat s elementem v určitém indexu. Může být také užitečné, pokud chcete načíst index jednoho nebo více prvků.

Tato metoda projekce vyžaduje transformační funkci , selectorkterá vytvoří jednu hodnotu pro každou hodnotu ve zdrojové sekvenci source. Pokud selector vrátí hodnotu, která je sama kolekcí, je na příjemci, aby dílčí sekvence přecházely ručně. V takové situaci může být lepší, když dotaz vrátí jednu sloučenou sekvenci hodnot. Dosáhnete toho tak, že místo použijete metodu SelectManySelect. I když SelectMany funguje podobně Selectjako , liší se v tom, že transformační funkce vrátí kolekci, o kterou se pak před vrácením rozbalí SelectMany .

Platí pro

Select<TSource,TResult>(IEnumerable<TSource>, Func<TSource,TResult>)

Promítá každý prvek sekvence do nového formuláře.

public:
generic <typename TSource, typename TResult>
[System::Runtime::CompilerServices::Extension]
 static System::Collections::Generic::IEnumerable<TResult> ^ Select(System::Collections::Generic::IEnumerable<TSource> ^ source, Func<TSource, TResult> ^ selector);
public static System.Collections.Generic.IEnumerable<TResult> Select<TSource,TResult> (this System.Collections.Generic.IEnumerable<TSource> source, Func<TSource,TResult> selector);
static member Select : seq<'Source> * Func<'Source, 'Result> -> seq<'Result>
<Extension()>
Public Function Select(Of TSource, TResult) (source As IEnumerable(Of TSource), selector As Func(Of TSource, TResult)) As IEnumerable(Of TResult)

Parametry typu

TSource

Typ prvků objektu source.

TResult

Typ hodnoty vrácené parametrem selector.

Parametry

source
IEnumerable<TSource>

Posloupnost hodnot, na které se má vyvolat transformační funkce.

selector
Func<TSource,TResult>

Transformační funkce, která se použije u každého prvku.

Návraty

IEnumerable<TResult>

Objekt, IEnumerable<T> jehož prvky jsou výsledkem vyvolání transformační funkce u každého prvku objektu source.

Výjimky

source nebo selector je null.

Příklady

Následující příklad kódu ukazuje, jak použít Select<TSource,TResult>(IEnumerable<TSource>, Func<TSource,TResult>) k promítání na sekvenci hodnot.

IEnumerable<int> squares =
    Enumerable.Range(1, 10).Select(x => x * x);

foreach (int num in squares)
{
    Console.WriteLine(num);
}
/*
 This code produces the following output:

 1
 4
 9
 16
 25
 36
 49
 64
 81
 100
*/
' Create a collection of sequential integers
' from 1 to 10 and project their squares.
Dim squares As IEnumerable(Of Integer) =
Enumerable.Range(1, 10).Select(Function(x) x * x)

Dim output As New System.Text.StringBuilder
For Each num As Integer In squares
    output.AppendLine(num)
Next

' Display the output.
Console.WriteLine(output.ToString())

' This code produces the following output:
'
' 1
' 4
' 9
' 16
' 25
' 36
' 49
' 64
' 81
' 100

Poznámky

Tato metoda se implementuje pomocí odloženého spuštění. Okamžitá návratová hodnota je objekt, který ukládá všechny informace potřebné k provedení akce. Dotaz reprezentovaný touto metodou není proveden, dokud objekt není výčet buď voláním jeho GetEnumerator metody přímo, nebo pomocí foreach v jazyce Visual C# nebo For Each v jazyce Visual Basic.

Tato metoda projekce vyžaduje transformační funkci , selectorkterá vytvoří jednu hodnotu pro každou hodnotu ve zdrojové sekvenci source. Pokud selector vrátí hodnotu, která je sama kolekcí, je na příjemci, aby dílčí sekvence přecházely ručně. V takové situaci může být lepší, když dotaz vrátí jednu sloučenou sekvenci hodnot. Dosáhnete toho tak, že místo použijete metodu SelectManySelect. I když SelectMany funguje podobně Selectjako , liší se v tom, že transformační funkce vrátí kolekci, o kterou se pak před vrácením rozbalí SelectMany .

V syntaxi výrazu select dotazu se klauzule (Visual C#) nebo Select (Visual Basic) překládá na vyvolání Select.

Viz také

Platí pro