C#对除第一对之外的字典列表进行排序
本文关键字:列表 字典 排序 | 更新日期: 2023-09-27 17:53:51
我正在尝试对字典进行排序
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;
我建议使用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
dictionary.Take(1).Concat(dictionary.Skip(1).OrderBy({ logic }))
你明白了,我认为
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
不能保证订单。
根据它的实施,订单在项目移除后会被打乱一次。
排除第一对
我建议不要按订单记下你的项目。
试试这样的
var result = YourList.OrderBy(mc => mc.SomePropToSortOn)
.ToDictionary(mc => mc.Key.ToString(),
mc => mc.Value.ToString(),
StringComparer.OrdinalIgnoreCase);
您可以使用LINQ .OrderBy
:
dictionary.OrderBy(t => t.Value).ToDictionary(t => t.Key, t=> t.Value);
您可以尝试使用以下代码:
var first = dictionary.Take(1);
var orderedRest = dictionary.Skip(1).OrderBy(p => p.Value);
var items = first.Union(orderedRest);
我已经提到,我认为Dictionary不是适合这种情况的集合类型。在我看来,你应该使用List<KeyValuePair<string, int>>
。上面的代码也适用于列表。