我正在尝试按以下顺序对字符串列表进行排序:("7foo", "FOO1", "FOO2", "foo4", "foo4_1", "foo5", "foo5_1", "FOO8", "Foo27_QA", "Foo29_QA")
我尝试使用list.sortedWith{}
:
val list = mutableListOf("FOO1", "FOO2", "7foo", "FOO8", "foo5","foo27_QA", "foo4_1", "foo29_QA", "foo5_1", "foo4")
val sorted2 = list.sortedWith(compareBy(String.CASE_INSENSITIVE_ORDER, { it }))
但结果是[7foo, FOO1, FOO2, Foo27_QA, Foo29_QA, foo4, foo4_1, foo5, foo5_1, FOO8]
2条答案
按热度按时间5t7ly7z51#
问题是你想得到的订单。
默认比较器和
CASE_INSENSITIVE_ORDER
比较器都遵循字典顺序。但是,您期望的结果并不是这样的顺序。按字典顺序(不区分大小写):
Foo29_QA
在foo4
之前,因此使用默认比较器时结果良好。因此,您需要编写自己的比较器来应用自己的逻辑。
好吧,那么如何排序你的列表(这不是一个容易的任务)。我假设你的订单遵循以下模式:
{$number_prefix}{"foo"}{$number}{"_"}{$alphanumeric_suffix}
我们将按以下方式进行排序:
$number_prefix
描述$number
ASC$alphanumeric_suffix
描述最后,我们可以使用以下形式:
0qx6xfy62#
您可以尝试使用此函数提取编号
你就可以