2011-02-08 88 views
4

我有一些与double值相关的字符串。我需要能够通过值轻松地对它们进行排序,并轻松地将字符串作为某种列表。这些对可能有100k +。字典或列表

所以,我的问题是我是否应该使用带有字符串的字典作为键和双精度值或具有相同键和值的KeyValuePair的List?

在词典中的情况下,很容易通过

dict.Keys.toList()

领取钥匙的列表,在列表中的情况下,很容易通过值通过

list.Sort(delegate(KeyValuePair x, KeyValuePair y) { return y.Value.CompareTo(x.Value); })进行排序。

虽然我还没找到一种办法。你有什么建议?

+2

选择所有的串1周的方式都是双重价值独特之处? – 2011-02-08 16:51:04

+1

除了@Matt Ellen的问题,你需要通过字符串键进行查找吗?你只是说按价值排序,并得到字符串,但没有关于你是否正在查找。 – jason 2011-02-08 16:54:34

回答

1

这里为1的值来选择都在你的键值列表中的字符串或从keyvaluepair

List<string> onestrings = list.Where(a=>a.Value == 1).Select(a => a.Key).ToList(); 
List<string> allstrings = list.Select(a => a.Key).ToList(); 
0

我假设你有一个以上的字符串给定的double值。

你可以仍然这样做的另一种方式:Dictionary<double, list<string>>

所以你会采取双重价值的关键,当你得到一个字符串用相同的双重价值,你把它添加到列表中。

通过这种方式,您可以获得字典的查找速度,并且您仍然可以在需要时执行某种键。

1

其中一个主要考虑因素是您的值是否是唯一的。如果它们不是,字典将不起作用,因为它需要唯一的密钥。这也将更难以分类。

如果您只是使用它来存储值对,并且没有唯一性约束,我个人会使用List<Tuple<double,string>>

3

我会推荐一个SortedList<double, string>。这听起来像正是你想要的:

  • double值自动排序(在Keys属性)
  • 字符串是通过Values财产,以无障碍

这将只有当你的工作当然,double的值是唯一的。否则,可能会在自己的收藏紧裹SortedList<double, List<string>>,是这样的:

class DoubleStringList 
{ 
    SortedList<double, List<string>> _strings = new SortedList<double, List<string>>(); 

    public void Add(string str, double value) 
    { 
     List<string> list; 
     if (!_strings.TryGetValue(value, out list)) 
     { 
      _strings[value] = list = new List<string>(); 
     } 

     list.Add(str); 
    } 

    public IEnumerable<KeyValuePair<double, string>> GetEntries() 
    { 
     var entries = from entry in _strings 
         from str in entry.Value 
         select new KeyValuePair<double, string>(entry.Key, str); 

     return entries; 
    } 
} 
0

怎么样Lookup

Dictionary<string,double> dic = new Dictionary<string,double>(); 
ILookup<double,string> lookup = dic.ToLookup(kvp => kvp.Value, kvp => kvp.Key);