0

こんにちは、次のようなオブジェクトを持つ配列があるとしましょう:

NSArray *array =[NSArray alloc] initWithObjects:@"id",@"name",@"id",@"name",@"id",@"name"..

...など、 IDオブジェクトやNAMESのみを取得して配列を作成できますか。私が本当に達成したいのは、テーブルビューのサブタイトルにIDを、テーブルビューのタイトルに名前を付けたいということです。助言がありますか?

編集:皆さん、ご協力ありがとうございます。既に回答を得ています。.php からオブジェクトを取得しているため、NSDictionary を使用できませんでした。とにかくありがとう!

4

5 に答える 5

1

最初から 2 つの配列を使用しないのはなぜですか? 配列を分割する必要がある場合は、偶数と奇数で分割するのが簡単な方法です。

NSArray *array =[[NSArray alloc] initWithObjects:@"id",@"name",@"id",@"name",@"id",@"name",nil];

NSArray *ids = [array objectsAtIndexes:[array indexesOfObjectsPassingTest:^BOOL(id obj, NSUInteger idx, BOOL *stop) {
    return ((idx % 2) == 0);
}]];

NSArray *names = [array objectsAtIndexes:[array indexesOfObjectsPassingTest:^BOOL(id obj, NSUInteger idx, BOOL *stop) {
    return ((idx % 2) != 0);
}]];
于 2013-04-18T19:20:11.917 に答える
-1

多くの回答は、可能であれば推奨される他のデータ構造を使用することを提案するだけです。しかし、そのような配列があり、これを行う必要があると仮定すると、難しくありません。配列を 2 つに処理できます。大量のコピーが発生する可能性があります。または、単に配列のビューを取得することもできます-これは、コピーのアクセス時間のわずかな時間を交換します. JASArray これはチェックコードがまったくない場合です(それはあなたに任されています):

@interface JASArray : NSArray

- (id) initWith:(NSArray *)baseArray jumpTo:(NSUInteger)jumpTo strideBy:(NSUInteger)strideBy;

@end

オーバーライドNSArrayするには、実装するだけでcount済みますobjectAtIndex::

@implementation JASArray
{
   NSUInteger jump;
   NSUInteger stride;
   NSArray *base;
}

- (id) initWith:(NSArray *)baseArray jumpTo:(NSUInteger)jumpTo strideBy:(NSUInteger)strideBy
{
   self = [super init];
   if (self)
   {
      base = baseArray;
      jump = jumpTo;
      stride = strideBy;
   }
   return self;
}

- (NSUInteger) count
{
   return 1 + (base.count - jump - 1) / stride;
}

- (id) objectAtIndex:(NSUInteger)index
{
   return [base objectAtIndex:(jump + index * stride)];
}

@end

テストとして、意図的な不一致のペアに注意してください。

NSArray *array =@[ @"id1", @"name1", @"id2", @"name2", @"id3", @"name3", @"id4" ];
JASArray *ids = [[JASArray alloc] initWith:array jumpTo:0 strideBy:2];
JASArray *names = [[JASArray alloc] initWith:array jumpTo:1 strideBy:2];
NSLog(@"%@\n%@\n%@", array, ids, names);

出力:

JumpAndStride[10480:303] (
    id1,
    name1,
    id2,
    name2,
    id3,
    name3,
    id4
)
(
    id1,
    id2,
    id3,
    id4
)
(
    name1,
    name2,
    name3
)

HTH

于 2013-04-18T19:58:05.613 に答える