2012-02-06 23 views
14

Max ve Min almak için bir yöntem var bir çift çift sayı NSMutableArray Max ve Min değerleri almak için benim için bir yolu var mı. Ben zaten var olan bir yöntemi arıyorum, kendimi diziyi sıralamak için değil. Beni de ilgilendirecek diziyi sıralamak için API'ye benim için bir yöntem oluşturursanız. sadece min almak istiyorsabir NSMutableArray

cevap

45

teşekkür ederiz ve maksimum iki katına:

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

sadece bunları sıralamak isteseydik:

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

NSNumber sınıf sıralamaz güzel Sadece compare: kullanarak, ancak daha karmaşık sıralama yapmak gerekirse, bir blok t alır -sortUsingComparator: yöntemini kullanabilirsiniz o sıralama yapmak. Geçerli diziyi değiştirmek yerine, sıralanmış yeni dizileri döndürecek NSArray yöntemleri de vardır. Daha fazla bilgi için NSArray ve NSMutableArray belgelerine bakın.

+0

işlev yapmak? Üzerinde belgelere bakıyordum ancak NSArray veya NSMutableArray öğesinde hiçbir şey bulamıyorum. Ona iletilen dizenin ne olduğunu ve bunun biçiminin ne olduğunu bilmek istiyorum. –

+2

@MikeKhan 'NSArray' üzerinde tanımlanan bir yöntem değil. NSObject'in uyguladığı "NSKeyValueCoding" protokolünde tanımlanmıştır. Burada belgeleri bulabilirsiniz: https://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Protocols/NSKeyValueCoding_Protocol/Reference/Reference.html#//apple_ref/occ/cat/NSKeyValueCoding –

+0

Apple her zaman Keys için dize değişmezinde kullanır mı? – DevilInDisguise

2

Sıralama, o (nlogn) şeklindedir, bu nedenle maksimum ve en az bir kez istiyorsanız, lütfen sıralama yapmayın. En iyi yol, diziden geçmek ve tek tek karşılaştırmak ve yani doğrusal, yani 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

Eğer tamsayı kullanımda maksimum değeri elde etmek istiyorsanız bu: -

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

Eğer NSNumber max değeri bu kullanmak almak istiyorsanız: - valueForKeyPath ne yapar

NSNumber * max = [array valueForKeyPath:@"@max.intValue"]; 
İlgili konular