我想根據最後一個字符對我的字符串數組進行排序。這裏是我的字符串數組:基於Swift中最後一個字符的字符串排序
["c_572A267C-DAC8-487D-B1AF-719FE8E3A6AB_FF6E00_2",
"b_69E21DC6-431C-4373-B4F1-90BF7FB5462B_FFC000_1"]
現在我想根據這是後最後下劃線(_)最後一個值這個數組排序。 可能嗎?
感謝
我想根據最後一個字符對我的字符串數組進行排序。這裏是我的字符串數組:基於Swift中最後一個字符的字符串排序
["c_572A267C-DAC8-487D-B1AF-719FE8E3A6AB_FF6E00_2",
"b_69E21DC6-431C-4373-B4F1-90BF7FB5462B_FFC000_1"]
現在我想根據這是後最後下劃線(_)最後一個值這個數組排序。 可能嗎?
感謝
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)) }
我可以提到,如果數組包含一個空字符串('「」'),它會導致崩潰:'致命錯誤:不能在startIndex之前遞減。 –
是的,我知道我添加了一個假設,但似乎OP想要排序非空字符串。 – vadian
毫無疑問,這是。通過使用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
包含任何空字符串(""
)排序應爲是。
但是(除非我誤會),仍然存在一個問題:a =「X」,b =「」,c =「Y」:(a,b)是無法比擬的,(b,c)是無法比擬的。然後(a,c)也必須是無法比擬的,但它們不是。 - 返回'false'的* *對稱*條件總是看起來可疑。 –
我認爲你的觀點現在對我來說很清楚,它類似於傳遞性屬性邏輯,對吧?排序'[「X」,「」,「Y」]'的當前輸出應該是相同的,不需要編輯... –
它在https://en.wikipedia.org/中被稱爲「不可比性的傳遞性」 wiki/Weak_ordering#Strict_weak_orderings並確保元素完全按照<<(「不可比」元素爲「相等」)進行排序 - 當然,所有這些只在*有*空字符串時才起作用。 –
最後一個下劃線總是跟着一個數字嗎?或者它可以是多位數字或其他字符?如果是的話:他們應該如何排序,數字或字符串?如果足夠的話會怎麼樣? - 涵蓋所有可能案例的精確問題陳述總是一個好的開始。 –