基于Swift中最后一个字符的字符串排序

时间:2017-07-23 08:12:21

标签: arrays swift string sorting

我想根据最后一个字符对字符串数组进行排序。这是我的字符串数组:

["c_572A267C-DAC8-487D-B1AF-719FE8E3A6AB_FF6E00_2",
 "b_69E21DC6-431C-4373-B4F1-90BF7FB5462B_FFC000_1"]

现在我想根据 最后一个下划线(_)后的最后一个值对此数组进行排序。 有可能吗?

谢谢

3 个答案:

答案 0 :(得分:2)

sorted可以提供自定义排序条件(假设所有字符串都不为空)

let array = ["c_572A267C-DAC8-487D-B1AF-719FE8E3A6AB_FF6E00_2", "b_69E21DC6-431C-4373-B4F1-90BF7FB5462B_FFC000_1"]
let sortedArray = array.sorted { $0.substring(from: $0.index(before: $0.endIndex)) < $1.substring(from: $1.index(before: $1.endIndex)) }

答案 1 :(得分:0)

毫无疑问。使用sorted(by:),您可以这样做:

let myArray = ["c_572A267C-DAC8-487D-B1AF-719FE8E3A6AB_FF6E00_2",
               "b_69E21DC6-431C-4373-B4F1-90BF7FB5462B_FFC000_1"]

let sortedArray = myArray.sorted {
    guard let str1LastChar = $0.characters.last, let str2LastChar = $1.characters.last else {
        return false
    }

    return str1LastChar < str2LastChar
}

print(sortedArray)

请注意,如果myArray包含任何空字符串(""),则排序应该是原样。

答案 2 :(得分:0)

使用Higher Order Function的另一个答案:

  1. 颠倒Array中的每个单词
  2. 然后排序
let arr = ["c_572A267C-DAC8-487D-B1AF-719FE8E3A6AB_FF6E00_2",
               "b_69E21DC6-431C-4373-B4F1-90BF7FB5462B_FFC000_1"]

一行:

let returnValue = arr.map({String($0.reversed())}).sorted().map({String($0.reversed())})

多行:

let reverseEachWordsArr = arr.map { value in
    return String(value.reversed())
}

let finalCharSortArr = reverseEachWordsArr.sorted().map { word  in
    return String(word.reversed())
}
print(finalCharSortArr)

输出:

["b_69E21DC6-431C-4373-B4F1-90BF7FB5462B_FFC000_1", 
 "c_572A267C-DAC8-487D-B1AF-719FE8E3A6AB_FF6E00_2"]