日期:2014-05-17  浏览次数:22056 次

C#求获取一个Dictionary中value最小的key
RT,求比较高效的解放方法

------解决方案--------------------
minkey = dict.Keys.Select(x => new { x, y = dict[x] }).OrderBy(x => x.y).First().x;
------解决方案--------------------
Dictionary<string, int> dict = new Dictionary<string, int>();
            dict.OrderBy(d => d.Value).Select(d => d.Key).FirstOrDefault();

------解决方案--------------------
(from d in dict orderby d.Value select d.Key).

引用:
Quote: 引用:

minkey = dict.Keys.Select(x => new { x, y = dict[x] }).OrderBy(x => x.y).First().x;


太厉害了,我都在发愁准备遍历呢,我知道这个是linq,就是不太精通,能详细的给我分析下原理吗?


这个是扩展方法,不是LINQ,LINQ是基于扩展方法的语法糖了,补一下LINQ的写法,一般都是和扩展方法一起使用的。


Dictionary<string, int> dict = new Dictionary<string, int>();
        dict.Add("1", 1);
        dict.Add("2", 2);
        dict.Add("3", 3);
        dict.Add("4", 4);
        dict.Add("5", 1);
        
        var minKey = (from d in dict orderby d.Value ascending select d.Key).First();
        //考虑到不止一条的情况,分两步查询最小值的所有Key,这样的写法可能更好看懂
        var allMinKeys = (from d in dict where d.Value == dict[minKey] select d.Key).ToArray();