PIYO - Tech & Life -

LinqToObjectiveCの実装を覗く

LinqToObjectiveCの中身を覗く

Objective-CのNSArrayやNSDictionaryでwhereやselectなんかを使えるようにするカテゴリがあるという話をしました。

ActiveRecordのようなselectやwhereをObjective-Cで使う - ぴよログ

記事を書いたあと中身を覗いてみたのですが、なんのことはない普通のforループでしたww

たとえば、引数に渡したブロックの戻り値がYESとなる要素だけを返すlinq_whereの実装はこのようになっています。

- (NSArray *)linq_where:(LINQCondition)predicate
{
    NSMutableArray* result = [[NSMutableArray alloc] init];
    for(id item in self) {
       if (predicate(item)) {
           [result addObject:item];
       }
    }
    return result;
}

新しいNSArrayを作ってそこに必要なものだけ入れて返しているわけです。他のメソッドもほぼ同じでした。

pros/cons

メリットは自前で書くときと同じようなループ処理を書かなくてよくなる、コードがすっきりすること。

デメリットは多少のオーバーヘッドがあるかも?というところかな。特殊な実装をしているわけではないので敬遠する理由もないでしょうね。