我有一個Drinks包含theDrinkName欄位的物件 ( )陣列。我希望能夠首先按字母順序對Drink物件theDrinkName欄位進行排序,然后按數字排序。
這是我用來生成所有飲料的函式。
data class Drink(val theDrinkName:String)
object DrinkData {
fun generateAllDrinks():Array<Drink> {
return arrayOf(
Drink("Vodka"),
Drink("rum"),
Drink("Gin"),
Drink("151"),
Drink("99")
)
}
}
我按字母順序(基于theDrinkName)對它進行排序,如下所示:
val allDrinks = DrinkData.generateAllDrinks().sortedBy { it.theDrinkName.toLowerCase().first()}.toTypedArray()
for (drink in allDrinks){
println(drink.theDrinkName)
}
這將列印以下內容:
151
99
Gin
rum
Vodka
默認情況下,它首先對數字進行排序,然后按字母排序。如何先按字母然后按數字對這些資料進行排序,如下所示:
想要的結果:
Gin
rum
Vodka
151
99
uj5u.com熱心網友回復:
您可以先按第一個字符是否為數字的指示排序,然后按全名排序:
val allDrinks = DrinkData.generateAllDrinks().sortedWith(
compareBy<Drink> { it.theDrinkName.first().isDigit() }
.thenBy { it.theDrinkName.lowercase() }
)
uj5u.com熱心網友回復:
另一種可能的解決方案:
在單詞之前獲得數字的原因是因為字母的 ASCII 值比數字大。您可以在單詞前添加一個空格以降低它們的比較值并將其用于排序。
DrinkData.generateAllDrinks().sortedBy { drink ->
drink.theDrinkName.lowercase().let { if (it[0].isDigit()) it else " $it" }
}
操場
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/359773.html
