对列表进行排序 Kotlin

co*_*ndp 5 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)]
Run Code Online (Sandbox Code Playgroud)

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

s1m*_*nw1 4

只需将sortedBywhich 按升序排序(即 0 在 1 之前等)与 结合使用sumBy,对子列表中 y 的值求和:

list.sortedBy { it.sumBy { it.y } }
Run Code Online (Sandbox Code Playgroud)

K文档:

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

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

请注意y,将所有值相加sumBy才有效,因为 0 和 1 是给定场景中唯一可能的值。