2015-09-28 143 views
0

我有一個方法[Order toJSON],它將我的類映射到必須發送到服務器的複雜NSDictionary。要發送它,我使用NSJsonSerialization將其轉換爲字符串。比較複雜的NSDictionary

這本字典的形式爲:

@{ 
    @"key": @"value", 
    @"order": @[ 
    @{ @"name": @"obj1", @"content": @[ ... ] }, 
    @{ @"name": @"obj2", @"content": @[ ... ] } 
    ] 
} 

我編寫單元測試,以檢查的NSDictionary是正確的。問題是我實際上不知道數組的順序。 obj1之前我可以有obj2。 當我使用- [NSDictionary isEqualToDictionary]時,由於對象的順序,它有時會失敗。

有沒有比較這些字典而不比較它包含的數組順序的方法?對數組進行排序可能是一種選擇,但對於測試以外的其他任何事情都沒有用處,而且它非常複雜(並且很昂貴)。

+1

也許做兩個數組之間的交集(或聯合,或其他),然後比較它們?我不知道它是否真的很快。 – Larme

+0

嗯,我想過,但第一個數組包含包含另一個數組的對象。如果可能的話,我正在尋找更高效的解決方案。 – Sunder

+0

您正在做:您自己的自定義對象到JSON。檢查與您自己的自定義對象的平等性會更有趣嗎?寫適當的自定義'isEqual:'? – Larme

回答

1

我想將數組轉換爲NSCountedSet將在這裏幫助。 NSCountedSet忽略對象的順序,並且還計算重複的元素,因此您將獲得預期的比較。

+0

請參閱我的編輯,我需要將整個字典序列化爲JSON,並且'NSCountedSet'不能由'NSJSONSerialization'類序列化。如果包含計數的集合,是否有另一種方法將整個字典轉換爲字符串? – Sunder