如何使用Kotlin检查字符串数组是否按字母顺序排序?

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.

Aiv*_*ean 6

这是一个班轮:

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))(单次通过数组),这是此任务的最佳选择.


Bil*_*ket 5

您可以使用简单的单线:

array.zipWithNext { s1, s2 -> s1 <= s2 }.all { it }
Run Code Online (Sandbox Code Playgroud)

  • `array.zipWithNext().all { it.first &lt;= it.second }` (4认同)

sha*_*678 1

我确信您可以使用 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