我使用下面的代码
对元组列表进行了排序// for loop code
{
list.Add(new Tuple(log[0], "arr"));
list.Add(new Tuple(log[ 1 ], "dep"));
}
// sorts the list
list.Sort((a, b) => a.Item1.CompareTo(b.Item1));
排序后,看起来像这样
如果值重复,我想根据标签优先级对列表进行排序,例如' arr'应该优先于' dep'并且应该像这样
我怎样才能在C#中做到这一点?
答案 0 :(得分:1)
您只需将该逻辑添加到比较中:
list.Sort((a, b) =>
{
int result = a.Item1.CompareTo(b.Item1);
return result == 0 ? a.Item2.CompareTo(b.Item2) : result;
});
换句话说,如果Item1
属性比较相等,则比较Item2
值并返回其结果。否则返回原始结果。
请注意,此示例利用了这样一个事实,即您希望具有优先级的值将自然地按您想要的顺序排序,因为词法上"arr"
位于"dep"
之前。
使用Sort()
方法效率最高。但是,您可以使用LINQ来提高代码的表现力。类似的东西:
list = list.OrderBy(x => x.Item1).ThenBy(x => x.Item2).ToList();
这将产生额外的内存分配,但对我来说更具可读性。有关更多示例,请参阅Sorting array by multiple key values。