2015年06月17日

LINQ to Objectサンプル(12): ある条件以降の要素を複写する

  
ここでは、リストを操作しマイナスが見つかったらそれ以降を別のリストに複写する例です。

■ループを使ったコード
var list = new List<int> { 9, 7, 5, 4, 2, 4, 0, -4, 8, -1, 0, 4 };
var ans = new List<int>();
bool find = false;
for (int i = 0; i < list.Count; i++) {
    if (list[i] < 0)
        find = true;
    if (find)
        ans.Add(list[i]);
}
ans.ForEach(Console.WriteLine);

このコードはちょっと無理やり感が否めないですが、まあ他の方法でもにたりよったりでしょう。
FindIndexメソッドを使い、その後複写のコードを書くという方法ありますね。


■LINQを使ったコード
var list = new List<int> { 9, 7, 5, 4, 2, 4, 0, -4, 8, -1, 0, 4 };
var ans = list.SkipWhile(n => n >= 0).ToList();
ans.ForEach(Console.WriteLine);


LINQを使ったコードでは、SkipWhileメソッドを使っています。指定した条件に一致している間は、要素を読み飛ばすメソッドです。
ここでは正の間だけスキップし、それ以降を取り出しています。



 

この記事へのトラックバックURL

http://trackback.blogsys.jp/livedoor/gushwell/52422654