Как отсортировать строковое значение 75,74,105,61,76? - PullRequest
0 голосов
/ 04 августа 2020

Сортировка не работает Kotlin с использованием функции sortedArrayDescending().

Я пробовал этот метод:

var temp1 = "75,74,105,61,76"
println("1st Value:: "+temp1)
var temp2 = temp1.split(",").toTypedArray()
println("2nd Value:: "+Arrays.toString(temp2))
var temp3 = temp2.sortedArrayDescending()
println(Arrays.toString(temp3))

Результат:

1st Value:: 75,74,105,61,76  
2nd Value:: [75, 74, 105, 61, 76]  
[76, 75, 74, 61, 105]

Почему 105 не на первом месте?

Ответы [ 3 ]

2 голосов
/ 04 августа 2020

Вы можете использовать функцию sortedByDescending для сортировки строк, содержащих целые числа, по убыванию:

val sortedTemp = "75,74,105,61,76"
            .split(",")
            .sortedByDescending { it.toInt() }
0 голосов
/ 08 августа 2020

Kotlin не предлагает стандартный способ сравнения строк с учетом числовых c значений внутри него.

Если вы хотите сравнить все элементы без преобразования их в числа, вы можете сравнить их по длине строки сначала, а затем по самой строке:

"75,74,105,61,76"
    .split(',')
    .sortedWith(compareByDescending<String> { it.length }.thenByDescending { it })

Результат: [105, 61, 74, 75, 76]

Есть два предостережения:

  • Он может работать неправильно, если есть другие символы, кроме цифр.
  • Может не работать должным образом, если числа имеют начальные нули.
0 голосов
/ 04 августа 2020

Вы сортируете строки, а не числа, просто сначала преобразуйте каждую String в Int, а затем отсортируйте список Ints, используя sortedDescending.

val strOfNumbers = "75,74,105,61,76"
val sortedNumbers = strOfNumbers.split(',').map(String::toInt).sortedDescending()

sortedNumbers будет:

[105, 76, 75, 74, 61]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...