Skip的應用
今天要說的方法是Skip
,就是可以忽略部分元素的方法,我們在處理資料時可能會有某些資料不想要輸出的需求,這時就可以用Skip
來達成,現在我們來看看Skip
要怎麼使用。
功能說明
設定要忽略的元素數量(Skip
、SkipLast
)或是條件(SkipWhile
),回傳的集合就不會包含其忽略的元素。
方法定義
Skip
有三種不同名稱的方法: Skip
、SkipLast
、SkipWhile
,它們的差別可以用下圖來說明:
我們看圖說故事:
Skip
: 由集合的第一個元素開始記數,到達指定的數量為止的元素都忽略不算在結果集合中SkipLast
: 由集合的最後個元素往前記數,到達指定的數量為止的元素都忽略不算在結果集合中SkipWhile
: 集合中符合條件的元素忽略,碰到第一個不符合條件的元素及其之後的元素都回傳
看完上面的例子應該會比較清楚三個Skip
的差別,接著我們依序來看方法定義。
Skip
public static IEnumerable<TSource> Skip<TSource>(
this IEnumerable<TSource> source,
int count);
count
: 要忽略的元素數量
Skip
是回傳忽略第1個到第count
個元素的集合。
SkipLast
public static IEnumerable<TSource> SkipLast<TSource>(
this IEnumerable<TSource> source,
int count);
count
: 要忽略的元素數量
SkipLast
是回傳忽略最後1個元素數來count
個元素的集合。
SkipWhile
public static IEnumerable<TSource> SkipWhile<TSource>(
this IEnumerable<TSource> source,
Func<TSource, bool> predicate);
public static IEnumerable<TSource> SkipWhile<TSource>(
this IEnumerable<TSource> source,
Func<TSource, int, bool> predicate);
predicate
: 判斷式,如果符合判斷是傳回true
的話則忽略此元素,反之遇到false
條件後的所有元素都保留- 第二個方法
predicate
多傳入index
參數為元素的位置
SkipWhile
是回傳不符合predicate
條件的元素及其後的所有的元素。
方法範例
顏色
依照上面的圖片的範例寫成方法
string[] color = new string[] { "Orange", "Blue", "Yellow", "Green", "Pink" };
IEnumerable<string> skipResults = color.Skip(3);
IEnumerable<string> skipLastResults = color.SkipLast(3);
IEnumerable<string> skipWhileResults = color.SkipWhile(x => x != "Yellow");
Dictionary<string, IEnumerable<string>> results = new Dictionary<string,IEnumerable<string>>(){
{ "Skip", skipResults },
{ "SkipLast", skipLastResults },
{ "SkipWhile", skipWhileResults }
};
string output = "";
foreach (KeyValuePair<string, IEnumerable<string>> keyValue in results)
{
output += $"{keyValue.Key}: ";
foreach (string c in keyValue.Value)
{
output += $"{c},";
}
output = output.Trim(',') + '\n';
}
Console.WriteLine(output);
輸出結果如下:
/*
* Skip: Green,Pink
* SkipLast: Orange,Blue
* SkipWhile: Yellow,Green,Pink
*/
特別之處
- 有延遲執行的特性,在
GetEnumerator()
或是foreach
叫用後才會執行 - 沒有查詢運算式
Skip
或SkipLast
指定的count
數量大於集合數量,則傳回空集合Skip
或SkipLast
指定的count
數量小於等於零,則傳回完整的集合SkipWhile
的predicate
對所有元素都傳回true
,則回傳空集合