如何在最后一个索引处添加元素 Swift
How to add element at Last index Swift
我正在从服务器获取一个数组并将其存储在 NSMutableArray 中。现在的问题是数组没有排序。例如。数组 = ["A","B","None","C","D"]。我想对其进行排序并最后放置 "None" 元素。即 ["A"、"B"、"C"、"D"、"None"]。尝试交换但无法匹配条件,因为数组将来可能会增加。检查下面我的代码,它没有按预期工作。
if array.containsObject( "None" ){
print("\(array.indexOfObject("None"))")
let noneIndex = array.indexOfObject("None")
print(noneIndex)
array.removeObject(noneIndex)
print("Remove Array:-\(array)")
array.insertObject(noneIndex, atIndex: (array.lastObject?.index)!)
print("Sorted Array:-\(array)")
}
var array = ["A", "B", "None", "C", "D"]
if let noneIndex = array.index(of: "None") {
array.remove(at: noneIndex)
array.append("None")
}
print(array)
也许我误解了你需要做什么,但如果你只想按字母顺序排序,你可以在数组上使用 sorted()
。
您还可以使用 filter
从数组中删除 "None",对其进行排序,然后将 "None" 作为最后一个元素追加
例如,如果您有
let elements = ["Alpha", "Bold", "None", "charlie", "Delta", "echo", "zebra", "k"]
您可以先过滤它:
let filteredElements = elements.filter { [=11=].uppercased() != "NONE"}
对过滤后的元素进行排序:
var sortedElements = filteredElements.sorted { [=12=].uppercased() < .uppercased()}
附加"None"
sortedElements.append("None") // ["Alpha", "Bold", "charlie", "Delta", "echo", "k", "zebra", "None"]
完成。
这里合并:
let lastElement = "None"
let elements = ["Alpha", "Bold", "None", "charlie", "Delta", "echo", "zebra", "k"]
var sortedElements = elements.filter({[=14=].uppercased() != lastElement.uppercased()}).sorted(by: {[=14=].uppercased() < .uppercased()})
sortedElements.append(lastElement)
希望对你有所帮助。
这会起作用:
// starting test array
let array = ["B", "None", "C","P","None","A", "Q"]
var sorted = array.sorted { (str1, str2) -> Bool in
return str1 < str2
}
sorted.forEach { str in
if str == "None" {
if let idx = sorted.index(of: str) {
sorted.remove(at: idx)
sorted.append(str)
}
}
}
// Sorted array is now ["A", "B", "C", "P", "Q", "None", "None"]
这应该将 None
移动到数组的末尾,并对其他元素进行排序:
let ["A", "B", "None", "C", "D"]
array.sorted { == "None" || [=10=] < } // ["A", "B", "C", "D", "None"]
这只是利用了可以从 Array
.
传递给 sort
/sorted
方法的 by
参数
Edit @MartinR 关于这个答案中的比较谓词有一个非常重要的观点,它确实没有提供 strong weak ordering
。使用正确的谓词对数组进行排序将遵循以下行:
array.sorted { [=11=] == "None" ? false : == "None" ? true : [=11=] < }
我正在从服务器获取一个数组并将其存储在 NSMutableArray 中。现在的问题是数组没有排序。例如。数组 = ["A","B","None","C","D"]。我想对其进行排序并最后放置 "None" 元素。即 ["A"、"B"、"C"、"D"、"None"]。尝试交换但无法匹配条件,因为数组将来可能会增加。检查下面我的代码,它没有按预期工作。
if array.containsObject( "None" ){
print("\(array.indexOfObject("None"))")
let noneIndex = array.indexOfObject("None")
print(noneIndex)
array.removeObject(noneIndex)
print("Remove Array:-\(array)")
array.insertObject(noneIndex, atIndex: (array.lastObject?.index)!)
print("Sorted Array:-\(array)")
}
var array = ["A", "B", "None", "C", "D"]
if let noneIndex = array.index(of: "None") {
array.remove(at: noneIndex)
array.append("None")
}
print(array)
也许我误解了你需要做什么,但如果你只想按字母顺序排序,你可以在数组上使用 sorted()
。
您还可以使用 filter
从数组中删除 "None",对其进行排序,然后将 "None" 作为最后一个元素追加
例如,如果您有
let elements = ["Alpha", "Bold", "None", "charlie", "Delta", "echo", "zebra", "k"]
您可以先过滤它:
let filteredElements = elements.filter { [=11=].uppercased() != "NONE"}
对过滤后的元素进行排序:
var sortedElements = filteredElements.sorted { [=12=].uppercased() < .uppercased()}
附加"None"
sortedElements.append("None") // ["Alpha", "Bold", "charlie", "Delta", "echo", "k", "zebra", "None"]
完成。
这里合并:
let lastElement = "None"
let elements = ["Alpha", "Bold", "None", "charlie", "Delta", "echo", "zebra", "k"]
var sortedElements = elements.filter({[=14=].uppercased() != lastElement.uppercased()}).sorted(by: {[=14=].uppercased() < .uppercased()})
sortedElements.append(lastElement)
希望对你有所帮助。
这会起作用:
// starting test array
let array = ["B", "None", "C","P","None","A", "Q"]
var sorted = array.sorted { (str1, str2) -> Bool in
return str1 < str2
}
sorted.forEach { str in
if str == "None" {
if let idx = sorted.index(of: str) {
sorted.remove(at: idx)
sorted.append(str)
}
}
}
// Sorted array is now ["A", "B", "C", "P", "Q", "None", "None"]
这应该将 None
移动到数组的末尾,并对其他元素进行排序:
let ["A", "B", "None", "C", "D"]
array.sorted { == "None" || [=10=] < } // ["A", "B", "C", "D", "None"]
这只是利用了可以从 Array
.
sort
/sorted
方法的 by
参数
Edit @MartinR 关于这个答案中的比较谓词有一个非常重要的观点,它确实没有提供 strong weak ordering
。使用正确的谓词对数组进行排序将遵循以下行:
array.sorted { [=11=] == "None" ? false : == "None" ? true : [=11=] < }