19

オブジェクトのソートされたコレクションがあります(SortedListまたはSortedDictionaryのいずれかです。主に読み取りに使用するため、追加のパフォーマンスはそれほど重要ではありません)。i 番目の値を取得するにはどうすればよいですか?

たとえば、コレクションに 1、2、3、4、5 の数字があり、中央値 (この例では 3) が必要な場合、どうすればよいでしょうか?

4

4 に答える 4

29

次のようなコードを使用できます

list.Values[index] 

ソートされたリストの場合。

SortedDictonary を使用する最も簡単な方法は、ElementAt() メソッドを使用することです。

dict.ElementAt(index).Value

ただし、これはリストの場合よりも遅くなります。

どちらの場合でも、カウントを確認する必要があります。奇数の場合は、 index = (list.length-1) / 2 ) を取ります。偶数の場合は、index1 = list.length/2 AND index2 = list.length/2 - 1 を取り、値を平均します。

于 2008-10-24T16:28:59.170 に答える
9

次のようなことを試してください:

list.Values[list.Count / 2];

Count が偶数の場合、真の中央値は中央の 2 つの数値の平均になることに注意してください。

于 2008-10-24T16:14:42.490 に答える
1

SortedDictionary でインデックスによって要素を何度も取得する必要がある場合、パフォーマンスは悲惨なものになります。入力として SortedDictionary を使用して新しい SortedList を作成し、SortedList にアクセスします。何倍も高速に実行されます。

于 2010-02-13T13:00:51.257 に答える