2012-02-06 38 views
14

Có cách nào trong iOS để tôi nhận được các giá trị Max và Min của một NSMutableArray của các số kép. Tôi đang tìm kiếm một phương pháp đã tồn tại, không phải cho tôi để sắp xếp mảng của tôi. Nếu có một phương pháp để tôi xây dựng vào API cho tôi để sắp xếp mảng mà tôi cũng quan tâm.là có một phương pháp để có được giá trị Max và Min của một NSMutableArray

Cảm ơn bạn

Trả lời

45

Nếu bạn muốn chỉ đơn giản là lấy min và max tăng gấp đôi:

NSNumber* min = [array valueForKeyPath:@"@min.self"]; 
NSNumber* max = [array valueForKeyPath:@"@max.self"]; 

Nếu bạn muốn chỉ đơn giản là sắp xếp chúng:

// the array is mutable, so we can sort inline 
[array sortUsingSelector:@selector(compare:)]; 

Lớp NSNumber sẽ loại độc đáo chỉ cần sử dụng compare:, nhưng nếu bạn cần phân loại phức tạp hơn, bạn có thể sử dụng phương thức -sortUsingComparator: có khối o làm việc phân loại. Ngoài ra còn có các phương thức trên NSArray sẽ trả về mảng mới được sắp xếp, thay vì sửa đổi mảng hiện tại. Xem tài liệu cho NSArrayNSMutableArray để biết thêm thông tin.

+0

Gì valueForKeyPath chức năng làm gì? Tôi đã được tìm kiếm tài liệu trên nó, nhưng tôi không thể tìm thấy bất cứ điều gì trong một trong hai NSArray hoặc NSMutableArray. Tôi muốn biết chuỗi được truyền cho nó là gì và định dạng của nó là gì. –

+2

@MikeKhan Nó không phải là một phương pháp được định nghĩa trên 'NSArray'. Nó được định nghĩa trong giao thức 'NSKeyValueCoding' mà' NSObject' thực hiện. Bạn có thể tìm tài liệu tại đây: https://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Protocols/NSKeyValueCoding_Protocol/Reference/Reference.html#//apple_ref/occ/cat/NSKeyValueCoding –

+0

sao táo luôn sử dụng @ trong chuỗi ký tự cho Keys? – DevilInDisguise

2

Sắp xếp là O (nlogn), vì vậy nếu bạn chỉ muốn tối đa và tối thiểu một lần, vui lòng không phân loại. Cách tốt nhất là đi qua mảng và so sánh từng mảng một và đó là tuyến tính, tức là O (n).

2
NSMutableArray * array=[[NSMutableArray alloc]initWithObjects:@"1",@"2",@"3",@"4",@"5",@"6", nil]; 

NSLog(@"Array:%@",array); 


int maxValue; 
for (NSString * strMaxi in array) { 
    int currentValue=[strMaxi intValue]; 
    if (currentValue > maxValue) { 
     maxValue=currentValue; 
    } 
} 
int miniValue; 
for (NSString * strMini in array) { 
    int currentValue=[strMini intValue]; 
    if (currentValue < miniValue) { 
     miniValue=currentValue; 
    } 
} 


NSLog(@"Maxi:%d",maxValue); 
NSLog(@"Mani:%d",miniValue); 
1

Nếu bạn muốn nhận được giá trị tối đa trong sử dụng nguyên này: -

int max = [[array valueForKeyPath:@"@max.intValue"] intValue]; 

Nếu bạn muốn nhận được giá trị tối đa trong NSNumber sử dụng này: -

NSNumber * max = [array valueForKeyPath:@"@max.intValue"]; 
Các vấn đề liên quan