我从服务器获取一个数组,并将其存储在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;
}
答案 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"]