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

Arrays 基于Swift中最后一个字符的字符串排序,arrays,swift,string,sorting,Arrays,Swift,String,Sorting,我想根据最后一个字符对字符串数组进行排序。这是我的字符串数组: ["c_572A267C-DAC8-487D-B1AF-719FE8E3A6AB_FF6E00_2", "b_69E21DC6-431C-4373-B4F1-90BF7FB5462B_FFC000_1"] 现在,我想根据最后一个值对这个数组进行排序,该值在最后一个下划线(389;)之后。 可能吗 感谢排序可以提供自定义排序条件(假设所有字符串都不是空的) let数组=[“c_572A267C-DAC8-487D-B1AF-719

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

["c_572A267C-DAC8-487D-B1AF-719FE8E3A6AB_FF6E00_2",
 "b_69E21DC6-431C-4373-B4F1-90BF7FB5462B_FFC000_1"]
现在,我想根据最后一个值对这个数组进行排序,该值在最后一个下划线(389;)之后 可能吗


感谢

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

let数组=[“c_572A267C-DAC8-487D-B1AF-719FE8E3A6AB_FF6E00_2”,“b_69E21DC6-431C-4373-B4F1-90BF7FB5462B_FFC000_1”]
让sortedArray=array.sorted{$0.substring(from:$0.index(before:$0.endIndex))<$1.substring(from:$1.index(before:$1.endIndex))}
Swift 3+语法更加方便

let array = ["c_572A267C-DAC8-487D-B1AF-719FE8E3A6AB_FF6E00_2", "b_69E21DC6-431C-4373-B4F1-90BF7FB5462B_FFC000_1"]
let sortedArray = array.sorted { $0.suffix(1) < $1.suffix(1) }
let数组=[“c_572A267C-DAC8-487D-B1AF-719FE8E3A6AB_FF6E00_2”,“b_69E21DC6-431C-4373-B4F1-90BF7FB5462B_FFC000_1”]
让sortedArray=array.sorted{$0.suffix(1)<$1.suffix(1)}

排序
可以提供自定义排序条件,例如(假设所有字符串都不是空的)

let数组=[“c_572A267C-DAC8-487D-B1AF-719FE8E3A6AB_FF6E00_2”,“b_69E21DC6-431C-4373-B4F1-90BF7FB5462B_FFC000_1”]
让sortedArray=array.sorted{$0.substring(from:$0.index(before:$0.endIndex))<$1.substring(from:$1.index(before:$1.endIndex))}
Swift 3+语法更加方便

let array = ["c_572A267C-DAC8-487D-B1AF-719FE8E3A6AB_FF6E00_2", "b_69E21DC6-431C-4373-B4F1-90BF7FB5462B_FFC000_1"]
let sortedArray = array.sorted { $0.suffix(1) < $1.suffix(1) }
let数组=[“c_572A267C-DAC8-487D-B1AF-719FE8E3A6AB_FF6E00_2”,“b_69E21DC6-431C-4373-B4F1-90BF7FB5462B_FFC000_1”]
让sortedArray=array.sorted{$0.suffix(1)<$1.suffix(1)}
毫无疑问是这样。通过使用,您可以这样做:

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=[“c_572A267C-DAC8-487D-B1AF-719FE8E3A6AB_FF6E00_2”,
“b_69E21DC6-431C-4373-B4F1-90BF7FB5462B_FFC000_1”]
让SorterDarray=myArray.sorted{
guard让str1LastChar=$0.characters.last,让str2LastChar=$1.characters.last else{
返回错误
}
返回str1LastChar
请注意,如果
myArray
包含任何空字符串(
),则排序应保持原样。

无疑是这样。通过使用,您可以这样做:

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=[“c_572A267C-DAC8-487D-B1AF-719FE8E3A6AB_FF6E00_2”,
“b_69E21DC6-431C-4373-B4F1-90BF7FB5462B_FFC000_1”]
让SorterDarray=myArray.sorted{
guard让str1LastChar=$0.characters.last,让str2LastChar=$1.characters.last else{
返回错误
}
返回str1LastChar

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

使用
高阶函数再回答一个问题

  • 数组中反转每个单词
  • 然后,排序
  • 一行:

    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)
    
    多行:

    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"]
    

    再回答一个带有高阶函数的问题

  • 数组中反转每个单词
  • 然后,排序
  • 一行:

    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)
    
    多行:

    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"]
    

    最后一个下划线后面是否总是跟一个数字?或者可以是多个数字或其他字符?如果是:它们应该如何排序,数字还是字符串?如果满足条件相等怎么办一个精确的问题陈述,涵盖所有可能的情况,总是一个好的开始。最后一个下划线是否总是跟在一位数字后面?或者可以是多个数字或其他字符?如果是:它们应该如何排序,数字还是字符串?如果满足条件相等怎么办涵盖所有可能情况的精确问题陈述始终是一个良好的开端。请允许我指出,如果数组包含空字符串(
    ),它将导致崩溃:
    致命错误:无法在startIndex之前递减。是的,我知道我添加了一个假设,但是OP似乎无论如何都要对非空字符串进行排序。请允许我指出,如果数组包含空字符串(
    “”
    ),它将导致崩溃:
    致命错误:无法在startIndex之前递减。
    。是的,我知道我添加了一个假设,但OP似乎无论如何都要对非空字符串进行排序。但是(除非我再次弄错了),还有一个问题:对于a=“X”,b=“”,c=“Y”:(a,b)是不可比的,(b,c)是不可比的。然后(a,c)也必须是不可比较的,但它们不是。一个返回
    false
    的对称条件在我看来总是可疑的。我想你的观点现在对我来说是清楚的,它类似于传递属性逻辑,对吗?排序
    [“X”,“Y”]
    的当前输出应该是相同的,没有编辑…它被调用“不可比性的传递性”并确保元素完全按照
    排序是的,Martin完全正确;要使其正式有效,您需要更改它,以便在
    时建立某种顺序“
    与任何其他非空字符串进行比较。例如,使其排序小于任何其他非空字符串:
    开关($0.characters.last,$1.characters.last){case let(lhsLast?,rhslat?):return lhsLast
    但是(除非我再次出错),仍然存在一个问题:使用a=“X”,b=“”,c=“Y”:(a,b)是不可比的,而(b,c)是不可比的。然后(a,c)也必须是不可比较的,但它们不是。一个返回
    false
    的对称条件在我看来总是可疑的。我想你的观点现在对我来说是清楚的,它类似于传递属性逻辑,对吗?排序
    [“X”,“Y”]
    的当前输出应该是相同的,没有编辑…它被调用“不可比性的传递性”并确保元素完全按照
    排序是的,Martin完全正确;要使其正式有效,您需要更改它,以便在
    时建立某种顺序“
    与任何其他非空字符串进行比较。例如,使其排序小于任何其他非空字符串:
    sw