所以我有List<Tuple<string, integer>>
A 10
A 11
B 12
B 13
我想要以下结果
B 12
B 13
A 10
A 11
基本上我想检查哪个字母表保持最高值,在这种情况下
B最高值为13
最高值是11
这意味着B必须在A之前运行。但是B保持12和13,所以它需要按升序运行。所以
B 12
B 13
然后
A 10
A 11
这可能吗?
所以我需要像
这样的东西foreach row in list.OrderBy(//order condition)
{
//do something
}
更新:第2项是唯一的,因此2字母表具有相同值的可能性是不可能的。
答案 0 :(得分:2)
我想也许这就是你所要求的:
list.GroupBy(x => x.Item1) // Group by Item1
.OrderByDescending(group => group.Max(x => x.Item2)) // Order the groups by the
// Max of Item2 (descending)
.Select(group => group.OrderBy(x => x.Item2)) // Order within the groups
// by Item2 (ascending)
.SelectMany(x => x) // Flatten the groups back into a single list
通过结合最后两个步骤,您可以使这更简洁:
list.GroupBy(x => x.Item1) // group by Item1
.OrderByDescending(group => group.Max(x => x.Item2)) // Order the groups by Max(Item2)
.SelectMany(group => group.OrderBy(x => x.Item2)) // Order within groups and flatten
答案 1 :(得分:0)
您似乎需要以下内容:
List<Tuple<string, int>> list = //getting your values
var result = list.GroupBy(x => x.Item1)
.Select(x => new
{
MaxValue = x.Max(y => y.Item2),
Items = x
})
.OrderByDescending(x => x.MaxValue)
.SelectMany(x => x.Items.OrderBy(y => y.Item2))
.ToList();
Item1
result
将包含所需的序列