返回c#dictionary who';s值(等级)符合标准
给定以下代码,从字典中返回具有最低年龄的密钥的最佳方法是什么返回c#dictionary who';s值(等级)符合标准,c#,dictionary,priority-queue,C#,Dictionary,Priority Queue,给定以下代码,从字典中返回具有最低年龄的密钥的最佳方法是什么 public class Person { public int age {get; set;} public string name {get; set;} public Person(int Age, string Name) { age = Age; name = Name; } }
public class Person
{
public int age {get; set;}
public string name {get; set;}
public Person(int Age, string Name)
{
age = Age;
name = Name;
}
}
public Dictionary<int, Person> people = new Dictionary<int, Person>();
public int idNumber = // Key of person with lowest age inside Dictionary ?????
公共类人物
{
公共整数{get;set;}
公共字符串名称{get;set;}
公众人物(整数年龄,字符串名称)
{
年龄=年龄;
名称=名称;
}
}
公共字典人物=新字典();
public int id number=//字典中年龄最小的人的密钥?????
我已经查看了优先级队列,但这一切似乎都有些过头了。我觉得必须有一个简单的方法,告诉我年龄最低的地方的钥匙。你可以找到最低年龄,然后找到那个年龄的人(或者第一个年龄相同的人,可能是倍数): 或者,更简单的是,只需使用
OrderBy
并获取第一个:
int id = people.OrderBy(kvp => kvp.Value.age).First().Key;
var key=people.Aggregate((a,b)=>a.Value.age
字典可以从键中找到值。它就是这样做的。使用不同的ADT处理有序值。当然,dictionanry
可以被视为一个IEnumerable
,标准LINQ(例如,OrderBy
)也适用,但这并没有利用字典(或不同ADT)的性质,这可能会导致不理想的不对称边界,具体取决于它的使用方式。那么:people.OrderBy呢(val=>val.Value)。选择(t=>t.Key)。FirstOrDefault();我认为对于这种情况,Lookup类会更好。First sample很可能更快。聪明。避免了重复扫描,但也避免了手动键入foreach。
int id = people.OrderBy(kvp => kvp.Value.age).First().Key;
var key = people.Aggregate((a, b) => a.Value.age < b.Value.age ? a : b).Key;