如何在Last index Swift中添加元素

时间:2016-12-15 07:43:49

标签: ios swift nsmutablearray swift2.3

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

#include "iostream"
#include "thread"

using namespace std;

class background_task{
    int data;

    int flag;

    public:
        background_task(int val):data(val),flag(data%2){}

        void operator()(void){
            int count = 0;
            while(count < 10000000)
            {
                if(flag)
                    cout <<'\n'<<"Yes";
                else
                    cout <<'\n'<<"   "<<"No";
                count++;
            }
        }
};

int main(int argc , char** argv){
    std::thread T1 {background_task(2)};
    std::thread T2 {background_task(3)};
    T1.join();
    T2.join();
    return 0;
}

4 个答案:

答案 0 :(得分:2)

也许我误解了你需要做什么,但如果你只想按字母顺序对它进行排序,你可以在数组上使用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()}

追加“无”

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({$0.uppercased() != lastElement.uppercased()}).sorted(by: {$0.uppercased() < $1.uppercased()})
sortedElements.append(lastElement)

希望对你有所帮助。

答案 1 :(得分:1)

var array = ["A", "B", "None", "C", "D"]
if let noneIndex = array.index(of: "None") {
    array.remove(at: noneIndex)
    array.append("None")
}
print(array)

答案 2 :(得分:1)

这应该在数组的末尾移动None,并对其他元素进行排序:

let ["A", "B", "None", "C", "D"]
array.sorted { $1 == "None" || $0 < $1 } // ["A", "B", "C", "D", "None"]

这简单地利用了by参数,可以从sort传递给sorted / Array方法。

编辑 @MartinR对此答案的比较谓词有一个非常强烈的观点,它确实没有提供strong weak ordering。使用正确的谓词对数组进行排序将遵循:

array.sorted { $0 == "None" ? false : $1 == "None" ? true : $0 < $1 }

答案 3 :(得分:0)

这将有效:

// 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"]