在 Objective-c 中访问二维 NSArray 中的值

Posted

技术标签:

【中文标题】在 Objective-c 中访问二维 NSArray 中的值【英文标题】:Access values in two dimensional NSArray in Objective-c 【发布时间】:2018-12-05 20:57:30 【问题描述】:

对于以下二维数组,我想搜索 John Smith 的姓名,然后检索 John Smith 的姓名和 John 的 id。

NSArray *employees = @[@[@"John Smith",@"1"],@[@"Ken Robinson",@"2"],@[@"Albert Jones",@"3"],@[@"Richard Johnson",@"4"]];

我可以使用上述语法创建数组。我将如何搜索 John 并检索 John Smith, 2 并访问员工的 id 2,类似于 employees[0][1] 其中 0 是索引,1 是 id 的维度。

这就是我在一维中搜索数组的方式,但我对使用二维数组进行搜索的语法感到困惑。

-(NSString *)findNameInArray:(NSString*) searchstring
NSArray* employees = @[@"John Smith"@"Ken Robinson",@"Albert Jones",@"Richard Johnson"];
for (long i=0;i<[employees count];i++) 
            name = employees[i];
            if ( [name localizedCaseInsensitiveCompare:searchstring] == NSOrderedSame) 
                return name;
            //close loop
return @"":
    

【问题讨论】:

为什么你首先有一个数组数组,而不是一个字典数组,比如:@[@@"id": @"1", @"name": @"John Smith", @@"id": @"2", @"name": @"Ken Robinson"],或者一个自定义对象数组“等效”?那会是更好的设计 在你的 for 循环中:name = employees[i]; 变为:NSArray *person = employees[i]; NSString *name = person[0]; if ([name localizedCase...) return person 数组数组是构建数据的糟糕选择。有一个类数组,其中类具有名称和编号的属性。它会让很多事情变得更简单。 【参考方案1】:

也许有一个很好的理由有一个数组数组。如果是这样,您可以使用适用于内部数组的谓词过滤外部数组...

// look for @"John" anywhere in the 1st element (case insensitive)
NSPredicate *p = [NSPredicate predicateWithFormat:@"SELF[0] CONTAINS[cd] %@", @"John"];
NSArray *matches = [employees filteredArrayUsingPredicate:p];

您还可以找到与 BEGINSWITH 开头的字符串的匹配项

【讨论】:

【参考方案2】:

是的,NSPredicate 是这种情况下的最佳解决方案。

【讨论】:

以上是关于在 Objective-c 中访问二维 NSArray 中的值的主要内容,如果未能解决你的问题,请参考以下文章

如何创建二维数组,大小在objective-c中作为变量给出

按二维排序 NSArray - Objective-C

如何在Objective-C中将二维整数数组对象添加到NSMutableArray?

Objective-C 中的访问者模式

在objective-c中刷新Gmail API访问令牌的正确方法

在 Swift 3 的值类型中访问 Objective-C 类别的属性(关联参考)