2012-07-17 43 views
7

Làm thế nào để bạn có được giá trị lớn nhất từ ​​NSArray với từ điển?Làm thế nào để có được giá trị lớn nhất từ ​​NSArray có chứa từ điển?

Cho phép nói rằng tôi có NSArray chứa từ điển có khóa "tuổi", "tên", v.v. Bây giờ tôi muốn có được kỷ lục có độ tuổi cao nhất. Điều này có thể thực hiện được với một số phép thuật KVC không? Hay tôi phải lặp lại và làm theo cách "thủ công"?

Tôi đã thử với một cái gì đó tương tự như sau:

int max = [[numbers valueForKeyPath:@"@max.intValue"] intValue]; 
+0

nếu bạn cần giá trị lớn nhất của TUỔI ... sử dụng @ max.age – waheeda

+1

Man, đôi khi tôi muốn chúng tôi đã có một cái gì đó như [LINQ] (http://en.wikipedia.org/wiki/Language_Integrated_Query) trong Ca cao .... – Jay

Trả lời

14

Trừ khi "intValue" là một chìa khóa trong từ điển của bạn, con đường chính sẽ không làm tốt lắm.

Nếu đó là độ tuổi tối đa bạn đang sử dụng thì bạn nên sử dụng @"@max.age" (trên từ điển) để tải xuống. Cũng vậy với bất kỳ khóa nào khác trong từ điển của bạn.

[myDictionary valueForKeyPath:@"@max.age"]; 

Nếu numbers là một mảng các giá trị bạn có thể sử dụng @"@max.self" như con đường quan trọng để có được giá trị lớn nhất.

[myArrayOfNumbers valueForKeyPath:@"@max.self"]; 
+1

Tôi đang sử dụng dòng thứ hai của bạn để lấy phần tử tối đa từ NSMutableArray của tôi (chứa tất cả các đối tượng NSNumber bên trong) và Tôi nhận được lỗi này: *** Chấm dứt ứng dụng do ngoại lệ chưa nắm bắt 'NSUnknownKeyException', lý do: '[<__ NSCFNumber 0x1dd44bc0> valueForUndefinedKey:]: lớp này không phải là giá trị khóa tuân thủ cho khóa tối đa.' Bất kỳ ý tưởng gì là sai? – uerceg

+0

Tôi xin lỗi. Tôi cho rằng nó sẽ hoạt động như NSPredicate và sử dụng 'self' khi không có gì khác được chỉ định. Ví dụ thứ hai chính xác sẽ là '[myArrayOfNumbers valueForKeyPath: @" @ max.self "];' (answer updated) –

+0

Tôi nghĩ bạn sẽ đề xuất giải pháp này, nhưng điều thực sự lạ là giải pháp cập nhật này KHÔNG LÀM VIỆC cho tôi . Tôi nhận được thông báo lỗi tương tự như trước đây. – uerceg

1

Bạn đang gần đó, bạn chỉ cần xác định các lĩnh vực chính xác mà bạn muốn từ mà bạn muốn giá trị tối đa:

NSInteger max = [[numbers valueForKeyPath:@"@max.age"] integerValue]; 

tôi lấy sự tự do để thay đổi int của bạn để NSInteger s, chỉ trong trường hợp ai đó muốn sử dụng mã này trên cả iOS và OS X.

+1

Đây là một câu trả lời thực sự tốt :) và nó đủ khác nhau từ câu trả lời được chấp nhận để đảm bảo một phiếu bầu lên. – Rambatino

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