0

嗨,有没有一种方法可以通过跳过每个 1 索引来创建一个数组,比如可以说我有一个包含如下对象的数组:

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

...等等,我可以通过仅获取ID对象和/或NAMES来创建一个数组。我陷入了困境,我真正想要实现的是我希望 id 出现在 tableview 副标题中,并且名称出现在 tableview 标题中。有什么建议么?

编辑:谢谢大家的帮助,已经得到了我的答案,我无法通过 NSDictionary,因为我正在从 .php 获取对象。无论如何谢谢你!

4

5 回答 5

2

你有两个选择

第一个(天真的)一个:

cell.subtitle.text = array[indexPath.row*2];
cell.title.text = array[indexPath.row*2+1];

NSDictionary无论如何,更正确的选择是使用s数组

NSArray *array = [NSArray alloc] initWithObjects:@{
    @"id": @"theId", @"name" : @"theName"},
    @"id": @"anotherId", @"name" : @"anotherName"},
    ...];

接着

cell.subtitle.text = array[indexPath.row][@"id"];
cell.title.text = array[indexPath.row][@"name"];
于 2013-04-18T19:20:33.577 回答
2

您可以通过制作字典对象数组轻松实现。

NSArray *array = @[@{@"Id":1, @"Name":@"UserName1"},@"Id":2, @"Name":@"UserName2"}];

cellForRowAtIndexPath: 方法中

NSDictionary *user = self.array[indexPath.row];

cell.textLabel.text = user[@"Id"];
cell.detailLabel.text = user[@"Name"];
于 2013-04-18T19:21:11.807 回答
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

如果您想将 ids 和名称分隔在两个不同的数组中,您可以遍历原始数组,并像这样使用 mod 运算符。-

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

for (int i = 0; i < array.count; i ++) {
    if (i % 2 == 0) {
        [ids addObject:[array objectAtIndex:i]];
    } else {
        [names addObject:[array objectAtIndex:i]];
    }
}
于 2013-04-18T19:20:44.070 回答
-1

如果可以的话,许多答案只会建议使用其他一些推荐的数据结构。但是假设你有这样一个数组并且需要这样做并不难。您可以将数组处理为两个 - 可能需要大量复制;或者您可以简单地查看数组 - 它会在访问时间上花费一点点时间来进行复制。这里JASArray 绝对没有检查代码(留给你):

@interface JASArray : NSArray

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

@end

要覆盖NSArray您只需要实现countand 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
)

高温高压

于 2013-04-18T19:58:05.613 回答