我正在尝试对字典进行排序
class Program {
static void Main()
{
// Example dictionary.
var dictionary = new Dictionary<string, int>(5);
dictionary.Add("cat", 3);
dictionary.Add("dog", 1);
dictionary.Add("mouse", 0);
dictionary.Add("elephant", 2);
dictionary.Add("bird", 4);
var items = from pair in dictionary
orderby pair.Value ascending
select pair;
// Display results.
foreach (KeyValuePair<string, int> pair in items)
{
Console.WriteLine("{0}: {1}", pair.Key, pair.Value);
}
items = from pair in dictionary
orderby pair.Value descending
select pair;
} }
结果是
mouse
dog
elephant
cat
bird
但我需要排除第一对以对其余部分进行排序并获得此结果
cat
mouse
dog
elephant
bird
我可以从这里做任何事吗?
var items = from pair in dictionary
orderby pair.Value ascending
select pair;
答案 0 :(得分:3)
我建议使用 Linq
var result = dictionary
.Take(1) // Take first element
.Concat(dictionary // Skip first element and sort the rest on value.
.Skip(1)
.OrderBy(o=>o.Value))
.Select(x=>x.Key);
<强>输出强>
cat ,
mouse ,
dog ,
elephant ,
bird
选中此Demo
答案 1 :(得分:1)
dictionary.Take(1).Concat(dictionary.Skip(1).OrderBy({ logic }))
你明白了我的想法
答案 2 :(得分:0)
尝试这样的事情
var result = YourList.OrderBy(mc => mc.SomePropToSortOn)
.ToDictionary(mc => mc.Key.ToString(),
mc => mc.Value.ToString(),
StringComparer.OrdinalIgnoreCase);
答案 3 :(得分:0)
您可以使用LINQ .OrderBy
:
dictionary.OrderBy(t => t.Value).ToDictionary(t => t.Key, t=> t.Value);
答案 4 :(得分:0)
var firstItems = dictionary.Take(1);
var sortItems = from pair in dictionary.Skip(1)
orderby pair.Value ascending
select pair;
var items = firstItems.Concat(sortItems);
请注意Dictionary
不保证订单。
根据其实施,订单将在项目移除后搞砸一次。
排除第一对
我建议您不要按订单记下您的商品。
答案 5 :(得分:0)
您可以尝试使用此代码:
var first = dictionary.Take(1);
var orderedRest = dictionary.Skip(1).OrderBy(p => p.Value);
var items = first.Union(orderedRest);
我已经提到过,我认为词典不是正确的收藏类型。在我看来,你应该使用List<KeyValuePair<string, int>>
。上面的代码也适用于列表。