NSMutableArrayのMaxとMinを取得するメソッドがあります

私はiOSでNSMutableArrayの最大値と最小値を得る方法がありますか?私はすでに配列の配列をソートするのではなく、既存のメソッドを探しています。私のためのメソッドを私のAPIを私のためにも私に興味がある配列を並べ替えるために構築する場合。

ありがとうございました

14

4 答え

単純に最小値と最大値の2倍を取得する場合は、次のようにします。

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

単純に並べ替えるには:

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

NSNumber クラスは compare:を使ってうまく並べ替えますが、さらに複雑な並べ替えを行う必要がある場合は、 -sortUsingComparator:メソッドソートを行うにはブロックが必要です。 NSArray には、現在の配列を変更する代わりに、ソートされた新しい配列を返すメソッドもあります。 NSArray および NSMutableArray を参照してください。

46
追加された
valueForKeyPath関数は何をしますか?私はそれについてのドキュメントを探していますが、私はNSArrayまたはNSMutableArrayのいずれかで何も見つけることができません。私はそれに渡される文字列が何で、どのような形式にすべきかを知りたい。
追加された 著者 Mike Khan,
@MikeKhan NSArray で定義されたメソッドではありません。 NSObject が実装する NSKeyValueCoding プロトコルで定義されています。このドキュメントは次の場所にあります: developer.apple.com/library/ios/#documentation/Cocoa/Referen‌ ce /…
追加された 著者 Jason Coco,
リンゴは常にキーの文字列リテラルで@を使用しますか?
追加された 著者 DevilInDisguise,

ソートはO(nlogn)なので、最大値と最小値を1回だけ指定したい場合は、ソートしないでください。最良の方法は、配列を通り、1つずつ比較し、それは線形である、すなわち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);
2
追加された

整数で最大値を取得する場合は、次のようにします。

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

NSNumberの最大値を取得する場合は、次のようにします。

NSNumber * max = [array valueForKeyPath:@"@max.intValue"];
1
追加された