[解決済み] C#で辞書の最高値のキーを取得する良い方法
2023-06-09 04:50:40
質問
の中の最大値のキーを取得しようとしています。
Dictionary<string, double> results
.
今のところ、こんな感じです。
double max = results.Max(kvp => kvp.Value);
return results.Where(kvp => kvp.Value == max).Select(kvp => kvp.Key).First();
しかし、これでは少し効率が悪いようなので、もっと良い方法はないかと考えていました。
どのように解決するのですか?
標準的なLINQを使った、最も読みやすいO(n)の答えだと思います。
var max = results.Aggregate((l, r) => l.Value > r.Value ? l : r).Key;
edit: CoffeeAddictに関する説明
Aggregate
は、一般的に知られている関数型コンセプトのLINQ名である
折りたたみ
セットの各要素をループして、指定した関数を適用します。
ここでは、大きい方の値を返す比較関数を指定しています。
ループしている間
Aggregate
は前回私の関数を呼び出したときの結果を記憶している。これは比較関数に変数
l
. この変数
r
は現在選択されている要素である。
つまり、aggregateがセット全体をループした後、最後に私の比較関数を呼び出したときの結果を返します。次に
.Key
メンバを読み取ります。それは辞書のエントリであることが分かっているからです。
これは別の見方です(これがコンパイルできることを保証するものではありません)。
var l = results[0];
for(int i=1; i<results.Count(); ++i)
{
var r = results[i];
if(r.Value > l.Value)
l = r;
}
var max = l.Key;
関連
-
[解決済み] [Entity Framework 4.1でエンティティに関連オブジェクトを追加する際に、エンティティオブジェクトをIEntityChangeTracker.の複数のインスタンスから参照できない。
-
[解決済み】ASP.NET Core Dependency Injectionのエラーです。アクティブ化しようとしているときに、タイプのサービスを解決できません。
-
[解決済み] UnityでOnCollisionEnterが呼ばれない
-
[解決済み] 辞書を値で並べ替えるにはどうしたらいいですか?
-
[解決済み] 与えられたキーがすでに辞書に存在するかどうかをチェックする
-
[解決済み] Pythonの辞書からキーを削除するにはどうしたらいいですか?
-
[解決済み] 辞書のリストを辞書の値でソートするにはどうしたらいいですか?
-
[解決済み] C#のオートプロパティに初期値を与える最良の方法は何ですか?
-
[解決済み] ディクショナリーで最大値を持つキーを取得する?
-
[解決済み] 辞書の値でキーを取得する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] [Solved] 1つ以上のエンティティで検証に失敗しました。詳細は'EntityValidationErrors'プロパティを参照してください [重複]。
-
[解決済み】指定されたキャストが有効でない?
-
[解決済み】C#はJavaのcharAt()と同等?)
-
[解決済み] 'SubSonic.Schema .DatabaseColumn' 型のオブジェクトをシリアライズする際に、循環参照が検出されました。
-
[解決済み】プロジェクトビルド時のエラー。エディタでスクリプトにコンパイルエラーがあるため、Playerのビルドにエラーが発生する
-
[解決済み】EF 5 Enable-Migrations : アセンブリにコンテキストタイプが見つかりませんでした
-
[解決済み】Visual studio 2019がデバッグ時にフリーズする件
-
[解決済み】 C# 条件演算子エラー 代入、call、increment、decrement、await、new object 式のみ文として使用可能です。
-
[解決済み】プロセスが実行されているかどうかを知るには?
-
[解決済み】スレッド終了またはアプリケーションの要求により、I/O操作が中断されました。