カスタムコレクション(ツリー)にIEnumerableを実装することを考えているので、foreachを使用してツリーをトラバースできます。しかし、私が知る限り、foreachは常にコレクションの最初の要素から始まります。 foreachが開始する要素から選択したいと思います。 foreachの開始元の要素を何らかの方法で変更することは可能ですか?
はい。以下をせよ:
Collection<string> myCollection = new Collection<string>;
foreach (string curString in myCollection.Skip(3))
//Dostuff
Skip
はIEnumerable関数であり、現在のインデックスから指定した多くの値をスキップします。一方、only最初の3つを使用する場合は、.Take
を使用します。
foreach (string curString in myCollection.Take(3))
これらはペアにすることもできるので、4-6個のアイテムだけが必要な場合は、次のようにします。
foreach (string curString in myCollection.Skip(3).Take(3))
このためには、LINQ to Objectsで Skip
メソッドを使用して、指定された数の要素をスキップするのが最も簡単です。
foreach (var value in sequence.Skip(1)) // Skips just one value
{
...
}
明らかに、他の値の1を変更して、異なる数の要素をスキップします...
同様に、 Take
を使用して、返される要素の数を制限できます。
my Edulinq blog series で、これら(および関連するSkipWhile
およびTakeWhile
メソッド)の両方について詳しく読むことができます。
Enumerable.Skip を使用して一部の要素をスキップし、そこから開始できます。
例えば:
foreach(item in theTree.Skip(9)) // Skips the first 9 items
{
// Do something
ただし、ツリーを記述している場合は、ツリーアイテム自体に、そこから列挙する新しいIEnumerable<T>
を返すメンバーを提供することができます。これは、長期的にはより有用になる可能性があります。