私は C# を使用しており、intervalRecordsPerObject
typeという名前の辞書を持っていDictionary<string, List<TimeInterval>>
ます。辞書を反復処理する必要があります。問題は、辞書を繰り返し処理するたびに、さらにKeyValuePairs
追加される可能性があることです。ディクショナリが大きくなるにつれて、新しいエントリも繰り返し処理する必要があります。
まず、私はこれを行いました:私に格言foreach
を与えた単純なループInvalidOperationException
Collection was modified; enumeration operation may not execute.
ToList()
C# がbeforeforeach
ループで変換するときに変化し続ける場合、この方法で Dictionary を反復処理できないことはわかっています。
for
キーを一時配列にコピーし、単純なループを使用して辞書を反復処理しCount
、新しいエントリが辞書に追加されるたびに、対応するキーも配列に追加できることを知っています。さて、問題は単純な配列が動的に拡大できないことであり、必要なサイズがどれくらいになるかを事前に知りません。
先に進むために、私はこれを行うと思いました:
List<string> keyList = new List<string>(intervalRecordsPerObject.Count);
intervalRecordsPerObject.Keys.CopyTo(keyList.ToArray(), 0);
これもできない。keyList
は現在空であるためkeyList.toArray()
、長さ 0 の配列を返しますArgumentException
。
Destination array is not long enough to copy all the items in the collection. Check array index and length.
ハマった!さらに何を試すことができますか?助けてくれてありがとう。
追加 1:
ディクショナリには、特定のオブジェクトが存在する時間間隔が格納されます。キーはオブジェクトの ID です。反復ごとに新しいエントリが追加される場合 (最悪の場合) もあれば、一度も追加されない場合もあります。エントリが追加されるかどうかは、いくつかの条件 (オブジェクトが他の間隔と重なるかどうかなど) によって決定されます。これにより、ID と対応する間隔リストが変更され、辞書に新しいエントリとして追加されます。