私は3600アイテムのリストを持っています。たとえば、ファクター5を使用してそのリストを間引いてみたいので、(新しい)リストには720個のアイテムが残ります。しかし、リストの「コース」を変更することなく。開始点と終了点は常に同じである必要があります。
のように:1- >スキップ30- > 31
どうやってするか?
次のようなものにする必要があります:
var last = list.Count - 1;
var thin = list.Where ((item, i) => i % 30 == 0 || i == last);
私があなたの主張を正しく理解すれば。
であり、ではないthin
ことに注意してください。通常はこれで十分です。ループで列挙し、他のLINQメソッドを使用できます。
しかし、それは怠惰に評価されます。つまり、元の変更があれば、それも変更されます。IEnumerable<int>
List<int>
foreach
list
thin
List<int>
代わりに取得したい場合は、ToList ()
呼び出しを追加するだけです。
var last = list.Count - 1;
var thin = list.Where ((item, i) => i % 30 == 0 || i == last)
.ToList ();
同様に、配列を取得するには、を使用しますToArray ()
。
これを機能させるために追加することを忘れないでくださいusing System.Linq;
。より高度なフィルタリング、集約、およびグループ化については、101LINQサンプル
も参照してください。
これを試して:
var thin = list.Where(a => a % 2 == 0).Union(new List<int> { list.Min(), list.Max() }).OrderBy(a => a);
これにより、最初と最後の値に加えて、中央にいくつかの値が表示されます。