私は持っている
Dictionary<Guid, DateTime> d = new Dictionary<Guid, DateTime>();
Guid
値を持つを取得するにはどうすればよいMAX
ですか?
私は持っている
Dictionary<Guid, DateTime> d = new Dictionary<Guid, DateTime>();
Guid
値を持つを取得するにはどうすればよいMAX
ですか?
これが受け入れられた答えだったので、質問の考えられるすべての意味をカバーしようとします:
var dict = new Dictionary<string, int> { { "b", 3 }, { "a", 4 } };
// greatest key
var maxKey = dict.Keys.Max(); // "b"
// greatest value
var maxValue = dict.Values.Max(); // 4
// key of the greatest value
// 4 is the greatest value, and its key is "a", so "a" is the answer.
var keyOfMaxValue = dict.Aggregate((x, y) => x.Value > y.Value ? x : y).Key; // "a"
注: 質問にSystem.Guid
はキー タイプがあります。「最大の GUID は何か」と尋ねるのは意味がないかもしれません。それらは、順序付け可能な概念を表すのではなく、単に一意の値であることを意図しているためです。それにもかかわらず、上記のコードは、>
演算子string
をサポートする任意の型で機能し、int
簡潔にするためにここで選択されています。
var maxGuid = Guid.Empty;
var maxDateTime = DateTime.MinValue;
foreach (var kvp in d)
{
if (kvp.Value > maxDateTime)
{
maxGuid = kvp.Key;
maxDateTime = kvp.Value;
}
}
Console.WriteLine("Guid of max date is: " + maxGuid.ToString());
最初にデータを注文することは、1 つの解決策になる可能性があります。
var maxGuid = d.OrderByDescending(x => x.Value).FirstOrDefault().Key;
Guid は IComparable を実装しているため、次のようになります。
d.Keys.Max()
また、なぜそうしたいのかは明らかではありません...
辞書でLINQを使用する。
var MaximumValue = dict.FirstOrDefault(x => x.Value.Equals(dict.Values.Max()));
受け入れられた答えは私にはうまくいきませんでした。ただし、次のコード (MoreLinq を使用) ではうまくいきました。
var fooDict = new Dictionary<string, int>();
var keyForBiggest = fooDict.MaxBy(kvp => kvp.Value).Key;
var biggestInt = fooDict[keyForBiggest];