NSArray の isEqual メソッドが 2 つの配列の要素を比較する方法は不明です。両方の配列に同一のオブジェクト (例: ==) が含まれているかどうかを確認しますか? それとも、オブジェクトで isEqual を使用して両方の配列の内容を比較しますか?
この方法に関するAppleのドキュメントは簡潔で不明確です。NSArray.m のソースも見つかりません。
NSArray の isEqual メソッドが 2 つの配列の要素を比較する方法は不明です。両方の配列に同一のオブジェクト (例: ==) が含まれているかどうかを確認しますか? それとも、オブジェクトで isEqual を使用して両方の配列の内容を比較しますか?
この方法に関するAppleのドキュメントは簡潔で不明確です。NSArray.m のソースも見つかりません。
最新の Cocoa ドキュメントには答えがありませんが、WebObjects 3.5 の NSArray ドキュメント までさかのぼると、次の gem が見つかります。
- (BOOL)
isEqual:
(id)anObjectレシーバーと anObject が等しい場合は YES を返します。それ以外の場合は NO を返します。YES の戻り値は、レシーバーと anObject が両方とも NSArray から継承するクラスのインスタンスであり、両方に同じオブジェクトが含まれていることを示します (
isEqualToArray:
メソッドによって決定されます)。
従来のドキュメント以外の答えに最も近いのは、Cocoa のコーディング ガイドラインでのオブジェクト比較に関するこの議論です。isEqual:
isEqualToWhatever:
それでも、ドキュメントを明確にするためにバグを報告することをお勧めします。
ドキュメントは明確です:
2 つの配列は、それぞれが同じ数のオブジェクトを保持し、各配列の特定のインデックスにあるオブジェクトが isEqual: テストを満たす場合、等しい内容を持ちます。
つまり、isEqual
(でなく==
) がオブジェクトの等価性をテストするために使用されます。
Cocoa のすべてのオブジェクトは-isEqual:
、デフォルトで比較されます。ただし、-isEqual:
onのデフォルト バージョンはポインタ比較を行います。そのため、オブジェクトがそのメソッドとメソッドをNSObject
適切に実装していない場合、単純にポインターを比較することになります。-isEqual:
-hash
こんな感じかも!? (ここに書いたので誤字脱字があるかもしれません)
if(![array1 isKindOfClass:[NSArray class]] || ![array2 isKindOfClass:[NSArray class]])
return NO;
if(array1 == array2)
return YES;
if(array1.count != array2.count)
return NO;
for(int i =0; i<array1.count;i++)
if(![array1[i] isEqual:array[i]])
return NO;
return YES;