Joe*_*ong 4 arrays string kotlin
我得到了一个字符串列表,我需要看看它们是否按字母顺序排列.
我知道我需要使用for循环并检查每个字符串的第一个字符,但我不知道如何从那里开始.
for (item in array)
println(item[0])
Run Code Online (Sandbox Code Playgroud)
例如["adam", "ben", "chloe"]应该返回true.
同样["ben", "adam", "chloe"]应该返回false.
这是一个班轮:
listOf(1, 2, 3).asSequence().zipWithNext { a, b -> a <= b }.all { it }
Run Code Online (Sandbox Code Playgroud)
说明:
List(a, b)返回邻居元素对.如果在每对中第一个元素小于或等于下一个元素,则数组是有序的.
如果要提高性能,可以先将数组换成延迟序列.在这种情况下,不会复制数组:
listOf(1, 2, 3).asSequence().windowed(2).all { (a, b) -> a <= b }
Run Code Online (Sandbox Code Playgroud)
整个过程是a.zip(a.drop(1))(单次通过数组),这是此任务的最佳选择.
您可以使用简单的单线:
array.zipWithNext { s1, s2 -> s1 <= s2 }.all { it }
Run Code Online (Sandbox Code Playgroud)
我确信您可以使用 for 循环完全完成您想要的任务。
然而,在 Kotlin 中,我个人认为使用Until来做这样的事情会更惯用:
fun isAlphabetical(stringsArray: Array<String>): Boolean {
if (stringsArray.size < 2) return true
return (1 until stringsArray.size).none { stringsArray[it] <= stringsArray[it - 1] }
}
fun main(args: Array<String>) {
val testCases = arrayOf(arrayOf("adam", "ben", "chloe"), arrayOf("ben", "adam", "chloe"))
for(testCase : Array<String> in testCases){
println("The strings are: ${testCase.joinToString()}")
if (isAlphabetical(testCase)) {
println("Strings are in alphabetical order.\n")
} else {
println("Strings are not in alphabetical order.\n")
}
}
}
Run Code Online (Sandbox Code Playgroud)
输出:
The strings are: adam, ben, chloe
Strings are in alphabetical order.
The strings are: ben, adam, chloe
Strings are not in alphabetical order.
Run Code Online (Sandbox Code Playgroud)
<=基本上,如果数组的长度大于,则仅将数组的每个元素与前一个元素进行比较(使用) 1。
| 归档时间: |
|
| 查看次数: |
1230 次 |
| 最近记录: |