Ios 如何在最后添加元素
我从服务器获取一个数组,并将其存储在NSMutableArray中。现在的问题是数组没有排序。例如,数组=[“A”、“B”、“无”、“C”、“D”]。我想对它进行排序,最后放置“None”元素。i、 e[“A”、“B”、“C”、“D”、“无”]。尝试交换,但无法匹配条件,因为阵列将来可能会增加。检查下面的代码,该代码未按预期工作Ios 如何在最后添加元素,ios,swift,nsmutablearray,swift2.3,Ios,Swift,Nsmutablearray,Swift2.3,我从服务器获取一个数组,并将其存储在NSMutableArray中。现在的问题是数组没有排序。例如,数组=[“A”、“B”、“无”、“C”、“D”]。我想对它进行排序,最后放置“None”元素。i、 e[“A”、“B”、“C”、“D”、“无”]。尝试交换,但无法匹配条件,因为阵列将来可能会增加。检查下面的代码,该代码未按预期工作 if array.containsObject( "None" ){ print("\(array.indexOfObject("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)")
}
也许我误解了您需要做什么,但是如果您只想按字母顺序对数组进行排序,可以在数组中使用
sorted()
您还可以使用filter
从数组中删除“None”,对其进行排序,然后附加“None”作为最后一个元素
例如,如果你有
let elements = ["Alpha", "Bold", "None", "charlie", "Delta", "echo", "zebra", "k"]
您可以从筛选它开始:
let filteredElements = elements.filter { $0.uppercased() != "NONE"}
对筛选的元素进行排序:
var sortedElements = filteredElements.sorted { $0.uppercased() < $1.uppercased()}
let ["A", "B", "None", "C", "D"]
array.sorted { $1 == "None" || $0 < $1 } // ["A", "B", "C", "D", "None"]
我们必须完成
在这里,它是组合的:
let lastElement = "None"
let elements = ["Alpha", "Bold", "None", "charlie", "Delta", "echo", "zebra", "k"]
var sortedElements = elements.filter({$0.uppercased() != lastElement.uppercased()}).sorted(by: {$0.uppercased() < $1.uppercased()})
sortedElements.append(lastElement)
让lastElement=“无”
让元素=[“Alpha”、“Bold”、“None”、“charlie”、“Delta”、“echo”、“zebra”、“k”]
var sortedElements=elements.filter({$0.uppercased()!=lastElement.uppercased()})。排序依据:{$0.uppercased()<$1.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"]
//启动测试数组
let数组=[“B”、“None”、“C”、“P”、“None”、“A”、“Q”]
var sorted=array.sorted{(str1,str2)->Bool-in
返回str1
这将移动数组末尾的None
,并对其他元素进行排序:
var sortedElements = filteredElements.sorted { $0.uppercased() < $1.uppercased()}
let ["A", "B", "None", "C", "D"]
array.sorted { $1 == "None" || $0 < $1 } // ["A", "B", "C", "D", "None"]
有什么理由不使用提供的
sort()
或sorted()
方法吗?您只需要array.addobject(“无”)为什么NSMutableArray
而不是Swift数组[String]
?请注意,如果编写if let noneIndex=array.indexOf(“无”),则不需要检查if array.contains()
{
它不仅仅是字母表,它可以是任何东西,比如单词。条件是“无”,每次都应该是最后一个。@iDeveloper,在排序的
闭包中添加条件,使“无”
始终是最大的值。@pbodsk它说,“Elememt”(也称为“AnyObject”)类型的值不起作用没有成员“UpPulcDead”的HMM,OK,这是因为您的数组被定义为包含“代码>任何对象< /COD>对象,而不是<代码> String < /Calp>。您的数组是如何定义的?”正如JJPETIC在评论中对他的答案所说的,您应该考虑使用Swift数组而不是< NSMutableArray > <代码> > <代码>过滤器,< COD。e> map和sorted
方法以及其他优点:)我建议使用Swift的数组。从长远来看会更好。sorted在swit 3中不可用。你确定吗?因为我在操场上用Swift 3尝试了这个示例。如果你在操场上复制整个示例,它应该可以工作。XCode 8.1 Swift 3应该是数组。sortswift 3中的ed
方法。@MartinR感谢您的观察,更正了可能有效的代码,但现在比较器不是所需的“严格弱排序”:“None”
@MartinR,更正,由于“None”
。我们可以学究式地解决这个问题,我们获得了一点速度,但是代价是增加了闭包的复杂性。我认为这不是不必要的学究式。排序的方法需要严格的弱排序。如果不满足先决条件,行为是未定义的。@MartinR,嗯……我错过了strict弱排序
部分来自API文档,感谢您提出。我更新了答案,希望现在是正确的:)
array.sorted { $0 == "None" ? false : $1 == "None" ? true : $0 < $1 }