我有一个词典:
Dictionary<string, CustomClass> _details = new Dictionary<string, CustomClass>()
CustomClass实现,IComparable因为方法中有自定义排序逻辑CompareTo().
我想CustomClass按排序顺序遍历_details中的所有内容.
所以我想做这样的事情:
foreach (string value in _details.Values.Sort())
{
}
Run Code Online (Sandbox Code Playgroud)
但这Sort()不是一种方法
我有什么选择?
你的问题有些不清楚,但重新阅读时,你似乎想要按价值而不是按键排序.在这种情况下,LINQ是使用该OrderBy方法的最佳方法:
foreach (var pair in _details.OrderBy(p => p.Value))
{
// Use pair.Key and pair.Value here
}
Run Code Online (Sandbox Code Playgroud)
或者,如果您只想要第一个值:
foreach (var value in _details.Values.OrderBy(p => p))
{
// Use value in here
}
Run Code Online (Sandbox Code Playgroud)
请注意,您无法就地排序字典 - Dictionary<,>基本上是无序的(或者更确切地说,顺序是实现细节,并且不能以可靠的方式更改).
如果你想按键排序,那么使用SortedList<,>或SortedDictionary<,>开始使用可能会更好.这两个都将保持集合永久按键排序.
Linq为OrderBy所有可用的enumerables 提供了一种方法.它会在每次调用时创建一个副本,而不会修改原始集合.
你的代码片段:string key in _details.Values没有任何意义.Values包含值而不是键.我假设您想迭代键值对,即foreach(_details.OrderBy中的var对(pair => pair.Value))
如果要在使用它进行排序后丢弃该值,可以添加一个.Select(pair=>pair.Key).如果您只对价值感兴趣,那就更简单了:
foreach(var value in _details.OrderBy(v=>v))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1235 次 |
| 最近记录: |