在 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中作为变量给出
如何在Objective-C中将二维整数数组对象添加到NSMutableArray?