Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/104.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何在最后添加元素_Ios_Swift_Nsmutablearray_Swift2.3 - Fatal编程技术网

Ios 如何在最后添加元素

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

我从服务器获取一个数组,并将其存储在NSMutableArray中。现在的问题是数组没有排序。例如,数组=[“A”、“B”、“无”、“C”、“D”]。我想对它进行排序,最后放置“None”元素。i、 e[“A”、“B”、“C”、“D”、“无”]。尝试交换,但无法匹配条件,因为阵列将来可能会增加。检查下面的代码,该代码未按预期工作

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 }