iPhoneアプリ開発で使うと便利!sortedArrayUsingDescriptorsで昇順、降順の並び替え

2013/08/18  カテゴリー:アプリ開発    タグ:タグ: ,



sortedArrayUsingDescriptors

iPhoneアプリ開発の上で必須と言っても過言ではないデータ管理。
その内のよく使う要素、配列の並び替えを整理してみました。


配列NSArrayの並び替え


Objective-Cの配列NSArrayの並び替えをする際に必要な機能が

NSSortDescriptor です。

NSArrayで並び替えをする時
やることは2つ

        
  1. NSSortDescriptorでルールを決めて、
  2. sortedArrayUsingDescriptorsでそのルールを使って並び替える

一段でなく、二段になってしまうだけで、ちょっと難しく感じてしまいますが、
実はそれだけなんです。

NSSortDescriptorでルールを決める


[NSSortDescriptor* 変数 =[NSSortDescriptor sortDescriptorWithKey:NSString* ascending:BOOL];

sortDescriptorWithKey:NSString* :キーの指定
ascending:BOOL:昇順ならYES、降順ならNO

ルールを使って並び替える


NSArray *変数 = [NSArray* sortedArrayUsingDescriptors :NSSortDescriptor*];

で上記で決めたルールを使って並べ替えることができます。


例題



例として配列を昇順、降順で並び替えたスクリプトをご紹介します。

この例の中に
可変配列NSMutableArrayを一時的にただの配列に変換して並び替え、
その後もう一度、可変配列NSMutableArrayに戻すというTipsもご紹介しています。

もし、この配列の可変、不変をふまないと、一応プログラム上は動きますが、
警告が出てしまいますので、知っておくといいと思います。


ちなみに

_mArBodyRecord:可変配列NSMutableArray

 としています。

順序を日時キーで昇順ソート

 
-(void)sortWithDate
{
    NSSortDescriptor *decDate =[NSSortDescriptor sortDescriptorWithKey:@"date" ascending:YES];
    NSArray *arDateBodyRecord = [_mArBodyRecord copy];
    arDateBodyRecord = [arDateBodyRecord sortedArrayUsingDescriptors:[NSArray arrayWithObject:decDate]];
    _mArBodyRecord = [arDateBodyRecord mutableCopy];
}

順序を日時キーで降順ソート

 
-(void)sortWithDateDown
{
    NSSortDescriptor *decDate =[NSSortDescriptor sortDescriptorWithKey:@"date" ascending:NO];
    NSArray *arDateBodyRecord = [_mArBodyRecord copy];
    arDateBodyRecord = [arDateBodyRecord sortedArrayUsingDescriptors:[NSArray arrayWithObject:decDate]];
    _mArBodyRecord = [arDateBodyRecord mutableCopy];
}


やっていることは簡単。
上記の違いはascendingがYESかNOかだけです。

このようにスクリプトとしてまとめておくと、
何度もこの機能を呼出して使えるようになり、
コードが冗長になることを防ぐことができます。

まとめ


最近全くObjective-Cの記事を書いていなかったので、
自分の開発の作業の中で忘れやすいと思ったので、シェアしてみました。

とりあえず、
一見取っ付きにくいけど、
配列で並び替えは簡単だ
ということを覚えておいていただければと思います。

お役に立てれば幸いです

久々なので参考書ご紹介


この本って、光があまりあたっていない気がしますが、私にはいい本です。
もちろん完璧ではないけど、なんだかんだ言って結局この本を一番使っています。
初心者の頃から活用し、今でもやっぱり自分は使いやすい


こっちは皆が勧めるので今更ですが。
ただ、最初は全くわからなかったです。
ある程度コードが書けるようになってから、
皆がすすめる理由がちょっとわかってきたって感じ。
何か調べたい時、基本この2冊を併用しています。


photo credit: net_efekt via photopin cc

Share on Google+Tweet about this on TwitterShare on Facebook