使用重复值对列表进行排序,并按优先级标记排序

时间:2017-03-12 03:00:54

标签: c# list sorting tuples

我使用下面的代码

对元组列表进行了排序
// 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));

排序后,看起来像这样

enter image description here

如果值重复,我想根据标签优先级对列表进行排序,例如' arr'应该优先于' dep'并且应该像这样

enter image description here

我怎样才能在C#中做到这一点?

1 个答案:

答案 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