今天要說的方法是Skip
,就是可以忽略部分元素的方法,我們在處理資料時可能會有某些資料不想要輸出的需求,這時就可以用Skip
來達成,現在我們來看看Skip
要怎麼使用。
設定要忽略的元素數量(Skip
、SkipLast
)或是條件(SkipWhile
),回傳的集合就不會包含其忽略的元素。
Skip
有三種不同名稱的方法: Skip
、SkipLast
、SkipWhile
,它們的差別可以用下圖來說明:
我們看圖說故事:
Skip
: 由集合的第一個元素開始記數,到達指定的數量為止的元素都忽略不算在結果集合中SkipLast
: 由集合的最後個元素往前記數,到達指定的數量為止的元素都忽略不算在結果集合中SkipWhile
: 集合中符合條件的元素忽略,碰到第一個不符合條件的元素及其之後的元素都回傳看完上面的例子應該會比較清楚三個Skip
的差別,接著我們依序來看方法定義。
public static IEnumerable<TSource> Skip<TSource>(
this IEnumerable<TSource> source,
int count);
count
: 要忽略的元素數量Skip
是回傳忽略第1個到第count
個元素的集合。
public static IEnumerable<TSource> SkipLast<TSource>(
this IEnumerable<TSource> source,
int count);
count
: 要忽略的元素數量SkipLast
是回傳忽略最後1個元素數來count
個元素的集合。
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
,則回傳空集合