Enumerable.Select 方法
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
將序列的每個專案投影成新的表單。
多載
| 名稱 | Description |
|---|---|
| Select<TSource,TResult>(IEnumerable<TSource>, Func<TSource,Int32,TResult>) |
藉由合併元素的索引,將序列的每個專案投影成新的表單。 |
| Select<TSource,TResult>(IEnumerable<TSource>, Func<TSource,TResult>) |
將序列的每個專案投影成新的表單。 |
Select<TSource,TResult>(IEnumerable<TSource>, Func<TSource,Int32,TResult>)
- 來源:
- Select.cs
- 來源:
- Select.cs
- 來源:
- Select.cs
- 來源:
- Select.cs
- 來源:
- Select.cs
藉由合併元素的索引,將序列的每個專案投影成新的表單。
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)
類型參數
- TSource
元素 source的類型。
- TResult
由 返回 selector的值類型。
參數
- source
- IEnumerable<TSource>
一串用來呼叫轉換函數的數值序列。
傳回
其 IEnumerable<T> 元素是對每個 source元素調用轉換函數所產生的。
例外狀況
source 或 selector 為 null。
範例
以下程式碼範例示範如何投影 Select<TSource,TResult>(IEnumerable<TSource>, Func<TSource,Int32,TResult>) 一連串值,並利用每個元素的索引。
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 }
備註
此方法透過延遲執行實現。 立即回傳值是一個物件,儲存執行動作所需的所有資訊。 此方法所代表的查詢,直到物件被枚舉,無論是直接呼叫其 GetEnumerator 方法,或是使用 C# 中的 foreach,或在 Visual Basic 中使用 For Each,才會執行。
第一個 selector 參數代表要處理的元素。 第二個 selector 參數代表該元素在來源序列中以零為基礎的索引。 如果元素順序已知,且你想對某個特定索引的元素做某件事,這會很有用。 如果你想取得一個或多個元素的索引,它也很有用。
此投影方法需要轉換函數 selector,才能對來源序列中的每個值產生一個值。 source 若 selector 回傳的值本身即為集合,則由使用者手動遍歷子序列。 在這種情況下,查詢回傳一串合併的數值可能更好。 為達成此目標,請使用 該 SelectMany 方法而非 Select。 雖然 SelectMany 的運作方式與 類似 Select,但其不同之處在於 轉換函數會回傳一個集合,然後再展開 , SelectMany 然後再返回。
適用於
Select<TSource,TResult>(IEnumerable<TSource>, Func<TSource,TResult>)
- 來源:
- Select.cs
- 來源:
- Select.cs
- 來源:
- Select.cs
- 來源:
- Select.cs
- 來源:
- Select.cs
將序列的每個專案投影成新的表單。
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)
類型參數
- TSource
元素 source的類型。
- TResult
由 返回 selector的值類型。
參數
- source
- IEnumerable<TSource>
一串用來呼叫轉換函數的數值序列。
- selector
- Func<TSource,TResult>
一個轉換函數,可以套用到每個元素。
傳回
其 IEnumerable<T> 元素是對每個 source元素調用轉換函數所產生的。
例外狀況
source 或 selector 為 null。
範例
以下程式碼範例示範如何對 Select<TSource,TResult>(IEnumerable<TSource>, Func<TSource,TResult>) 一連串值進行投影。
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
備註
此方法透過延遲執行實現。 立即回傳值是一個物件,儲存執行動作所需的所有資訊。 此方法所代表的查詢,直到物件被枚舉,無論是直接呼叫其 GetEnumerator 方法,或是使用 C# 中的 foreach,或在 Visual Basic 中使用 For Each,才會執行。
此投影方法需要轉換函數 selector,才能對來源序列中的每個值產生一個值。 source 若 selector 回傳的值本身即為集合,則由使用者手動遍歷子序列。 在這種情況下,查詢回傳一串合併的數值可能更好。 為達成此目標,請使用 該 SelectMany 方法而非 Select。 雖然 SelectMany 的運作方式與 類似 Select,但其不同之處在於 轉換函數會回傳一個集合,然後再展開 , SelectMany 然後再返回。
在查詢表達式語法中,select (C#) 或 Select (Visual Basic) 子句可轉譯為 Select 的呼叫。