2012-01-13 11 views
2

ここに私の質問です:私はplistにいくつかのオブジェクトがあります。これらのオブジェクトには、「年齢」、「性別」、「人物」などのようなkeysがあります。keysvaluesが私のif statementに適している場合は、このオブジェクトを私のarrayに追加します。NSMutableArrayのバブルソート

次に、私の配列が最終的にいくつかの適切なオブジェクトでいっぱいになると、すべてのオブジェクトのもう1つのキーをチェックしたいと思っています - "minimumCost"タイプはNSNumberで、最も安いオブジェクトから最も高価なオブジェクトにオブジェクトを並べ替えます。私はそれをどうやって行うのか分かりません。いくつかのアイデア、コード、ソリューションを教えてください。ここで

は私のコードは次のとおりです。

-(NSMutableArray*)creatingList:(NSMutableArray *)array 
    { 
     NSDictionary *mainDictionary = [NSDictionary dictionaryWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"gifts" ofType:@"txt"]]; 

     //---enumerate through the dictionary objects inside the rootDictionary 
     NSEnumerator *enumerator = [mainDictionary objectEnumerator]; 
     id returnValue; 

     while ((returnValue = [enumerator nextObject])) 
     { 
      // Big if statement comes 

      if (([[returnValue valueForKey:@"sex"]isEqualToNumber:[NSNumber numberWithInt:sex]] || 
       [[returnValue valueForKey:@"sex"]isEqualToNumber:[NSNumber numberWithInt:2]]) && 
       [[returnValue valueForKey:@"person"]isEqualToString:person] && 
       age >= [[returnValue valueForKey:@"minAge"] intValue] && 
       age <= [[returnValue valueForKey:@"maxAge"] intValue]) 

      { 
       [array addObject:[returnValue valueForKey:@"name"]];     
      } 
     } 

     for (int n = 0; n < [array count];n++) 
     { 
      // WHAT CODE SHOULD BE HERE ? 
     } 

    return array; 
} 

ありがとう!

+2

この宿題のようには見えないので、なぜバブルソート? – dasblinkenlight

+0

"minimumCost"の値でオブジェクトをソートしたいので。私はアレイの始めでもっとも安く、最後には最も広大なものを見たいと思っています。だから、私はそれをこのように呼んだのです。 – SmartTree

+0

バブルソートは、プログラミングプログラミングのためにほとんど排他的に使用されるかなり非効率なソートアルゴリズムです。 NSMutableArrayは、効率的なココアライブラリの組み込み機能を使用して、オブジェクトの任意のプロパティの組み合わせでソートできます。 – dasblinkenlight

答えて

4

組み込みのNSArrayソート方法を使用すると、独自の方法ではなく、これを実行できます。

は、ここで詳細を参照してください。http://www.cocoanetics.com/2009/03/nsarray-sorting-using-selectors/

+0

ありがとう、私はこれらのメソッドを使用しようとします。 – SmartTree

+0

しかし、キー値でオブジェクトをソートするにはどうすればこれらのメソッドを使用できますか? – SmartTree

+1

@SmartTree:ベンのリンクの最初の例は、まさにあなたが望むものです。しかし、あなたは一つのソート記述子が必要であり、キーはプロパティ/ゲッターメソッドの名前であれば '@" minimumCost "'でなければなりません。 – JeremyP

1

これはObjective-Cのとバブルソートの実装である以下のコードを見つけてください:

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    NSMutableArray *unsortedArray = [[NSMutableArray alloc]initWithObjects:@"4",@"7",@"3",@"2",@"10",@"8",nil]; 
    [self bubbleSort:unsortedArray]; 
    } 

実装:

- (NSArray *)bubbleSort:(NSMutableArray *)sortedArray 
{ 
    long count = sortedArray.count; 

    bool swapped = YES; 

    while (swapped) 
    { 
    swapped = NO; 

     for (int i = 1; i < count; i++) 
     { 
      int x = [sortedArray[i-1] intValue]; 
      int y = [sortedArray[i] intValue]; 

      if (x > y) 
      { 
       [sortedArray exchangeObjectAtIndex:(i-1) withObjectAtIndex:i]; 
       swapped = YES; 
      } 
     } 
    } 
    return sortedArray; 
}