読者です 読者をやめる 読者になる 読者になる

いぇいいぇい

ASP.NET、PHPを中心に書いています

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

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

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を見た時に「ああ、あるじゃん、これこれ」みたいな感じで勝手に自分の都合よく解釈しちゃったんだろうと思います。怖い怖い。