2013-07-19 42 views
8

Tôi có hai NSDictionaries chứa NSStrings. Để so sánh hai từ điển này, tôi sử dụng phương pháp isEqualToDictionary:. Tài liệu trên isEqualToDictionary: nóiSo sánh các từ điển chứa NSStrings

"Hai từ điển có nội dung ngang nhau nếu mỗi từ khóa có cùng số mục nhập và cho một khóa nhất định, đối tượng giá trị tương ứng trong mỗi từ điển thỏa mãn isEqual: test."

Vì vậy, các chuỗi của tôi được so sánh theo phương pháp isEqual:.

Câu hỏi đặt ra là:
Làm thế nào để isEqual: hoạt động cho NSString?

Ứng dụng có sử dụng isEqual: từ NSObject không? Tôi đã đọc rằng isEqual từ NSObject chỉ so sánh địa chỉ, sử dụng ==. Để chứng minh hoặc bác bỏ ý tưởng này tôi đã viết một mẫu:

NSString *str1 = @"sampleString"; 
NSString *str2 = [NSString stringWithFormat:@"%@", @"sampleString"]; 
BOOL result = [str1 isEqual:str2]; 

Các resultYES, địa chỉ của str1str2 là khác nhau mặc dù.
Vì vậy, nó không sử dụng isEqual: từ số NSObject (cái gì?), Hoặc NSObject 's isEqual: làm điều gì đó phức tạp hơn sau đó chỉ kiểm tra sự bình đẳng của địa chỉ.

Có ai biết nó thực sự hoạt động như thế nào không?

+0

Tại sao bạn không thể sử dụng phương pháp isEqualToString? quá dễ dàng? –

+0

@SamBudda Nó không phải là tôi, đó là NSDictionary sử dụng isEqual: so sánh các yếu tố của nó. – Anastasia

Trả lời

10

NSString ghi đè isEqual: để so sánh đúng chuỗi, vì vậy bạn hoàn toàn tốt khi so sánh từ điển theo cách này.

+0

Cảm ơn. Có cách nào để đảm bảo nó không? Tiêu đề và tài liệu cho NSString không nói gì cả. – Anastasia

+0

Tôi tìm thấy nó, thực tế này được đề cập trong "Lập trình Objective-c: Hướng dẫn Ranch Big Nerd". – Anastasia

+0

@Anastasia Ngoài ra, nó được đề cập rất gián tiếp trong các tài liệu dưới ['isEqualToString:'] (http://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/Reference/NSString. html # // apple_ref/occ/instm/NSString/isEqualToString :) có nghĩa là nó giống với 'isEqual:' khi cả hai đều là chuỗi, nhưng nhanh hơn. – cobbal

5

isEqualToDictionary so sánh mọi đối tượng với isEqual.

Trong trường hợp của tôi, nó không hoạt động với đối tượng NSString trong từ điển của tôi. Vì vậy, tôi đã thực hiện một giải pháp rất đơn giản. Tôi so sánh mô tả của cả hai từ điển. Điều này làm việc với các từ điển có chứa NSString và NSNumber và whit tất cả các đối tượng có chứa một phương thức mô tả.

[[myDict1 description] isEqualToString:[myDict2 description]] 
1

So sánh các mô tả bằng chữ từ điển. Tôi đang sử dụng nó trong các bài kiểm tra đơn vị.

NSString *a = dictionary.description; 
NSString *b = assertation.description; 
BOOL test = [a isEqualToString:b]; 
+0

Nhưng nếu các khóa và giá trị không theo thứ tự như thế nào? nó vẫn sẽ hoạt động? –

+0

'NSDictionary' không được đặt hàng mà tôi nghĩ. – Geri

Các vấn đề liên quan