🫘

(LINQ)SkipWhileの使い方、間違えていませんか?

2016/01/31に公開

はい!僕、間違えていました!

SkipWhile、単純に「条件に一致する要素をスキップする」ものだと思っていました。まったくの勘違い。アホですねー。

正しくは「条件に一致する限り要素をスキップする」ということみたいです。

以下サンプルです。

void Main()
{
    var names = new string[] { "太郎", "花子", "太郎", "花子" };
    var namesExclude = new string[] { "太郎" };

	// namesから"太郎"を除外したいとします。
	// まずはSkipWhileの場合
	var nameFiltered1 = names.SkipWhile(s => s == "太郎");
	Console.WriteLine("SkipWhile:");
	foreach (var name in nameFiltered1) {
		Console.WriteLine(name);
	}

	// Whereの場合は全要素フィルタリングできます
	var nameFiltered2 = names.Where(s => s != "太郎");
	Console.WriteLine("Where:");
	foreach (var name in nameFiltered2) {
		Console.WriteLine(name);
	}
}

出力結果

SkipWhile:
花子
太郎
花子
Where:
花子
花子

多分勘違いしたのはWhileの逆バージョンがほしくて、SkipWhileを見た時に「ああ、あるじゃん、これこれ」みたいな感じで勝手に自分の都合よく解釈しちゃったんだろうと思います。怖い怖い。

Discussion