【发布时间】:2015-10-30 00:32:04
【问题描述】:
我有 2 个完整的整数 JSONArray。
我想比较它们以获得相同的内容而不考虑顺序。
所以:
[1, 2] == [1, 2] 真 [1, 2] == [2, 1] 是的
JSONArray 有
public boolean equals(Object o)
但对于 [1, 2] == [2, 1] 会返回 FALSE
所以,我推出了自己的:
public boolean isEqual(JSONArray inputJsonArray,
JSONArray outputJsonArray) throws JSONException{
boolean equal=true, done;
int idx = 0;
if (inputJsonArray.length() == outputJsonArray.length()){
//make sure all elements in input array are in output array
done=false;
while (!done){
if(idx >= inputJsonArray.length()){
done=true;
}
else if (isIntInJsonArray(outputJsonArray,
inputJsonArray.getInt(idx)) == false){
equal = false;
done=true;
}
else{
idx ++;
}
}
if (equal){
//make sure all elements in output array are in input array
done=false;
while (!done){
if (idx >= outputJsonArray.length()){
done=true;
}
else if (isIntInJsonArray(inputJsonArray,
outputJsonArray.getInt(idx)) == false){
equal = false;
done=true;
}
else{
idx++;
}
}
}
}
else{
equal = false;
}
return equal;
}
基本上,我检查两个 JSONArrays 的长度是否相同。如果是,那么我确保 outputJsonArray 中的每个元素都在 inputJsonArray 中,反之亦然。执行此操作的主力方法是:
private boolean isIntInJsonArray(JSONArray inputJsonArray, int mInt) throws JSONException{
boolean found=false, done=false;
int idx = 0;
while (!done){
if(idx >= inputJsonArray.length()){
done=true;
}
else if (inputJsonArray.getInt(idx) == mInt){
found = true;
done=true;
}
else{
idx ++;
}
}
return(found);
}
这让我印象深刻,就像一大堆代码一样。有谁知道是否有更简单的方法可以做到这一点?
【问题讨论】: