按 swift 2.2 中的第二个字母对数组进行排序

Sort array by second letter in swift 2.2

我想按单词的第二个字母对数组进行排序。有人有想法吗?我将键入一个值和键,应该 return 排序列表如下: 数组 ["hello"、"bye"、"how" 等"] 排序:你好,怎么样,等等,再见

static func sort(keyValue: [(key:String, value:String)]) -> [(key:String, value:String)] {

    let returnValue = keyValue( {[=11=] < }

    return returnValue
}

您可以将 substringFromIndex 与标准 sortsortInPlace 函数一起使用:

let strings = ["hello", "bye", "how", "etc"]
let sortedStrings = strings.sort { [=10=].substringFromIndex([=10=].startIndex.advancedBy(1)) < .substringFromIndex(.startIndex.advancedBy(1)) }

作为使用 subStringFromIndex 的替代方法——一种特别适用于按 second 字符排序的方法(在相等的情况下;按字典顺序跟随字符)每个字符串的 - 您可以使用每个字符串的 CharacterViewdropFirst() 方法:

let strings = ["hello", "bye", "how", "etc"]
let sortedStrings = strings
    .sort { String([=10=].characters.dropFirst()) < String(.characters.dropFirst()) }

print(sortedStrings) // ["hello", "how", "etc", "bye"]

这等同于使用 substringFromIndexadvancedBy 的解决方案,好处是如果 strings 数组包含空字符串 ("")(尽管这可以通过分别使用 .advancedBy(1, limit: [=20=].endIndex).advancedBy(1, limit: .endIndex) 作为排序键来解决 advancedBy 解决方案)。


另请注意,字典顺序比较会将大写字母排在任何小写字母之前,因此 ["hello", "bYe", "hOw", "etc"] 将排入 ["hOw", "bYe", "hello", "etc"]。如果您想要不区分大小写的排序,您可以将 .lowercaseString 属性 应用于排序键:

let strings = ["hello", "bYe", "hOw", "etc"]
let sortedStrings = strings
    .sort { String([=11=].lowercaseString.characters.dropFirst()) <
        String(.lowercaseString.characters.dropFirst()) }

print(sortedStrings) // ["hello", "hOw", "etc", "bYe"]