排序列表Kotlin

时间:2018-02-21 11:08:14

标签: kotlin

我有一个(x, y)列表,其中y只能是0或1这样

例如:

[(3, 0), (3, 1), (5, 1)]
[(5, 0), (3, 1), (5, 1)]
[(1, 1), (3, 1), (5, 1)]
[(3, 0), (4, 0), (5, 1)]
[(5, 0), (4, 0), (5, 1)]
[(1, 1), (4, 0), (5, 1)]
[(3, 0), (3, 1), (5, 1)]
[(5, 0), (3, 1), (5, 1)]
[(1, 1), (3, 1), (5, 1)]

如何对列表进行排序,以便最多y = 0的子列表位于顶部?

2 个答案:

答案 0 :(得分:4)

下面的坐标表示:

class Point(val x: Int, val y: Int)

您可以在列表列表中使用this StackBlitz link,并在子列表中使用sortedByDescending y = 0的排序条件。按降序排列,最多y = 0的子列表将是第一个。

val sorted = input.sortedByDescending { it.count { it.y == 0 } }

答案 1 :(得分:2)

只需使用sortedBy按升序排序(即0之前的0等)与sumBy结合使用,将子列表中y的值相加:

list.sortedBy { it.sumBy { it.y } }

KDoc:

  

返回根据指定选择器函数返回的值的自然排序顺序排序的所有元素的列表。

您将获得一个列表,其中子列表按升序排序,其中y = 0元素的数量。

注意总结y中的所有sumBy值只能起作用,因为0和1是给定方案中唯一可能的值。