整数でいっぱいの 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;
}
基本的に、両方の JSONArray が同じ長さかどうかを確認します。そうであれば、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);
}
これは、非常に多くのコードのように思えます。これを行うためのより簡単な方法があるかどうか誰かが知っていますか?