答えて
あなたが使用することができますLINQは:
var lastItem = sortedDict.Values.Last();
また、最後のキーを取得することができます:
var lastkey = sortedDict.Keys.Last();
あなたも、最後のキーと値のペアを取得することができます。
var lastKeyValuePair = sortedDict.Last();
これはあなたにKey
とKeyValuePair<TKey, TValue>
とValue
特性を与えるだろう。
辞書が空の場合は例外がスローされることに注意してください。あなたがそれを望まないなら、LastOrDefault
に電話してください。
あなたはSortedDictionary.Values.Last();
を使用するかは、キーと値をしたい場合は
SortedDictionary.Last();
Last
拡張メソッドを使用すると結果は得られますが、コレクション全体を列挙してそこに移動する必要があります。それはそのような恥ですSortedDictionary<K, V>
Min
とMax
のメンバーは、特に内部的にはSortedSet<KeyValuePair<K, V>>
のMin
とMax
の属性を持っています。 SortedList<K, V>
へ
スイッチ:O(n)が望ましくない場合
は、あなたはいくつかのオプションがあります。再度何らかの理由でBCLはデフォルトでこれをパックしません。インデクサを使用して、O(1)時間で最大値(または最小値)を取得できます。拡張メソッドで拡張するとうまくいくでしょう。//Ensure you dont call Min Linq extension method. public KeyValuePair<K, V> Min<K, V>(this SortedList<K, V> dict) { return new KeyValuePair<K, V>(dict.Keys[0], dict.Values[0]); //is O(1) } //Ensure you dont call Max Linq extension method. public KeyValuePair<K, V> Max<K, V>(this SortedList<K, V> dict) { var index = dict.Count - 1; //O(1) again return new KeyValuePair<K, V>(dict.Keys[index], dict.Values[index]); }
SortedList<K, V>
には他のペナルティが付属しています。だからあなたは見たいかもしれない:What's the difference between SortedList and SortedDictionary?あなた自身の
SortedDictionary<K, V>
クラスを書く。これはとても簡単です。SortedSet<KeyValuePair<K, V>>
を内部コンテナとして持ち、Key
部分の比較に基づいてください。次のようなものがあります。public class SortedDictionary<K, V> : IDictionary<K, V> { SortedSet<KeyValuePair<K, V>> set; //initialize with appropriate comparer public KeyValuePair<K, V> Min { get { return set.Min; } } //O(log n) public KeyValuePair<K, V> Max { get { return set.Max; } } //O(log n) }
これはO(log n)です。文書化されていませんが、コードをチェックしました。
SortedDictionary<K, V>
クラスのプライベートメンバーであるバッキングセットにアクセスするためにfiddly reflectionを使用し、Min
およびMax
プロパティを呼び出します。式を使用してデリゲートをコンパイルし、パフォーマンスのためにキャッシュすることができます。これは非常に貧しい選択です。私はこれを示唆したとは信じられません。たとえば、他の実装に依存します。
TreeDictionary<K, V>
from C5の場合。彼らは、これらのメソッドはおそらくトリガー列挙をFindMin
とFindMax
both of which are O(log n)
これらのオプションを並べ替えて、より良いオプションが上部にあるように並べ替えたいと思うかもしれません。 – Servy
2番目のオプションのインデクサー/ 'TryGetValue'をどのように実装しますか? – CodesInChaos
@ CodeInChaosあなたが正しいです、それは役に立たなくなります。 .NETの悲しいセットは、実際の参照を取得する方法を公開していません。私は答えを編集する必要があります。 – nawfal
SortedListのリスト...
list[ Keys[Keys.Count - 1] ]; // returns the last entry in list
- 1. djangoテンプレートフィルタchaning - 最後の要素の最後の要素を取得
- 2. SortedDictionaryのサブセットをSortedDictionaryとして取得する
- 3. spark 2.1.1のウィンドウの最後の要素を取得
- 4. powershellのパイプラインの最後の要素を取得
- 5. XElementを使用してC#の最後の要素を取得
- 6. CSSの最後の要素を取得するには?
- 7. ベクトルの最後の要素を取得し、
- 8. Javaでリスト要素の最後の部分を取得する
- 9. arraylistの最後の要素を取得する
- 10. STDの最後の要素を取得する::文字列
- 11. 配列の最後の要素だけを取得する
- 12. CoffeeScriptで配列の最後の要素を取得する
- 13. リストから最後の要素のみを取得する
- 14. 私は、リストの最後の要素を取得したい、F#
- 15. 最後の要素の「表示」属性を取得
- 16. Pythonで範囲の最後の要素を取得する
- 17. スキームリストの最後の要素を取得する
- 18. volley json array最後の要素だけを取得
- 19. graphqlで最後の3要素を取得する方法
- 20. Cassandraリストデータ型C#最後の要素を取得
- 21. 最後の要素をすべて取得する - JS
- 22. 最後の要素をXMLファイルから取得する
- 23. $(this)の後の要素を取得
- 24. 取得最後から2番目の要素の一覧
- 25. 最初の要素の唯一の子要素を取得
- 26. XCTest:swipeLeft()の後に最後のコレクションのセル要素を取得できません
- 27. javaの配列の最初と最後の要素を取得するには?
- 28. Haskellでリストの最後の要素を取得する最速の方法
- 29. 要素の最小XPathを取得
- 30. PHP:配列の最初の要素と最後の要素を取得します。
を持っています。列挙なしで最後の要素(または任意の位置インデックスからの要素)を取得する方法があるのだろうか? SortedDictionaryはツリーにソートされているので、理論的には可能でしょうか? –
@RolandPihlakas:理論的には、はい。実際には、そうは思わない。 – SLaks
C++のバックグラウンドを持つ人にとって、これは受け入れがたいです。最後の要素を取得するために並べ替えられた辞書全体を列挙することは、無駄に非効率的です。より多くのC#コレクションライブラリがありますか? –