想要对数组进行排序
var myArray = ["Dog", "B-1", "C-1", "C-2", "C-3","Home"]
以给定的字符串顺序排列。
例如:myCustomString = "DC"
输入数组:
["Dog","Goat","C-1","C-2","C-3","Home"]
预期输出数组:
["Dog", "C-1".."C-3","B-1","Home"] // sorted by myCustomString variable
答案 0 :(得分:2)
如果将myCustomString
转换为字符数组会更容易。由于订阅API非常笨拙,因此使用Swift的String
会让人感到痛苦。这是一种方法:
var myArray = ["Dog", "B-1", "C-1", "C-2", "C-3","Home"]
let myCustomString = "DC".characters.map { $0 }
myArray.sort { str1, str2 in
let index1 = str1.isEmpty ? nil : myCustomString.index(of: str1[str1.startIndex])
let index2 = str2.isEmpty ? nil : myCustomString.index(of: str2[str2.startIndex])
switch (index1, index2) {
case (nil, nil):
return str1.compare(str2, options: .numeric) == .orderedAscending
case (nil, _):
return false
case (_, nil):
return true
default:
if index1 != index2 {
return index1! < index2!
} else {
return str1.compare(str2, options: .numeric) == .orderedAscending
}
}
}
print(myArray)
myArray
拆分为2个子阵列:其中一个包含您订购的所有元素;和一个你没有subArray1
subarray2
subArray1
和subArray2
以制作新的myArray
示例:
let myOrder = "DC".characters.map { $0 }
var myArray = ["Dog", "B-1", "C-1", "C-2", "C-3", "Home"]
var subArray1 = [String]()
var subArray2 = [String]()
myArray.forEach {
if $0.isEmpty || !myOrder.contains($0[$0.startIndex]) {
subArray2.append($0)
} else {
subArray1.append($0)
}
}
subArray1.sort { str1, str2 in
let firstChar1 = str1[str1.startIndex]
let firstChar2 = str2[str2.startIndex]
let index1 = myOrder.index(of: firstChar1)!
let index2 = myOrder.index(of: firstChar2)!
if index1 != index2 {
return index1 < index2
} else {
return str1.compare(str2, options: .numeric) == .orderedAscending
}
}
subArray2.sort { $0.compare($1, options: .numeric) == .orderedAscending }
myArray = subArray1 + subArray2
print(myArray)
答案 1 :(得分:1)
1)拆分&#34; myCustomString&#34;进入其角色组件
2)循环数组,将以先前拆分的字符开头的单词添加到自己的数组中。因此,对于这个例子,你最终会得到3个数组,一个是以&#39; D&#39;开头的字符串,一个是以&#39; C&#39;以及其他任何不满足这两个条件的事情。
创建一个数组字典(String:[String]),其中&#39;键&#39;是以前获得的单个字符(如&#39; D&#39;,&#39; C&#39;等)
制作一个额外的数组,以容纳那些与任何
然后循环遍历输入数组,同时循环字典以查看当前字符串是否以键中的字符开头。如果它没有匹配任何键,请将其放在额外的数组中。
3)单独对每个数组进行排序
4)将数组追加到1