查找包含特定字符串的对象的索引

时间:2014-07-09 09:02:42

标签: ios objective-c nsarray

我有一个NSObject类的数组。该类包含几个属性 - 名称,地址,描述等。当用户执行搜索时,我创建一个仅包含" name"的数组。属性。最后,我们得到了表格视图,其中包含"名称" (或单个单元格正确"名称")。

接下来,我需要显示该对象的所有其他属性,以查找用户找到的特定名称。为了尽可能清楚,我想澄清一下:我有一个包含许多对象的数组,其中包含许多属性。我只对其中一个属性有价值(不知道数组中的哪个对象包含该特定名称)。现在我需要以某种方式在我的数组中找到对象,它包含特定的" name"。可能,我需要一个该对象的索引,进一步很容易获得附加到此NSObject的所有其他属性。

我不确定我应该提供什么代码。所以,我将粘贴我的NSObject类的标题:

@interface PlaceHolder : NSObject

@property (nonatomic, retain) NSString *name;
@property (nonatomic, retain) NSString *description;
@property (nonatomic, retain) NSString *webPage;

任何建议都将不胜感激,谢谢!

更新: 整个阵列的NSLog:

整个数组是(

"\U041c\U043e\U0441\U043a\U043e\U0301\U0432\U0441\U043a\U0438\U0439 \U041a\U0440\U0435\U0301\U043c\U043b\U044c \U2014 \U0434\U0440\U0435\U0432\U043d\U0435\U0439\U0448\U0430\U044f \U0447\U0430\U0441\U0442\U044c \U041c\U043e\U0441\U043a\U0432\U044b, \U0433\U043b\U0430\U0432\U043d\U044b\U0439 \U043e\U0431\U0449\U0435\U0441\U0442\U0432\U0435\U043d\U043d\U043e-\U043f\U043e\U043b\U0438\U0442\U0438\U0447\U0435\U0441\U043a\U0438\U0439, \U0434\U0443\U0445\U043e\U0432\U043d\U043e-\U0440\U0435\U043b\U0438\U0433\U0438\U043e\U0437\U043d\U044b\U0439 \U0438 \U0438\U0441\U0442\U043e\U0440\U0438\U043a\U043e-\U0445\U0443\U0434\U043e\U0436\U0435\U0441\U0442\U0432\U0435\U043d\U043d\U044b\U0439 \U043a\U043e\U043c\U043f\U043b\U0435\U043a\U0441 \U0433\U043e\U0440\U043e\U0434\U0430, \U043e\U0444\U0438\U0446\U0438\U0430\U043b\U044c\U043d\U0430\U044f \U0440\U0435\U0437\U0438",
"\U0421\U043f\U0430\U0301\U0441\U0441\U043a\U0430\U044f \U0431\U0430\U0448\U043d\U044f (\U0440\U0430\U043d\U0435\U0435 \U2014 \U0424\U0440\U043e\U043b\U043e\U0301\U0432\U0441\U043a\U0430\U044f \U0431\U0430\U0448\U043d\U044f) \U2014 \U0432\U044b\U0445\U043e\U0434\U044f\U0449\U0430\U044f \U043d\U0430 \U041a\U0440\U0430\U0441\U043d\U0443\U044e \U043f\U043b\U043e\U0449\U0430\U0434\U044c \U043e\U0434\U043d\U0430 \U0438\U0437 20 \U0431\U0430\U0448\U0435\U043d \U041c\U043e\U0441\U043a\U043e\U0432\U0441\U043a\U043e\U0433\U043e \U041a\U0440\U0435\U043c\U043b\U044f. \U0412 \U0431\U0430\U0448\U043d\U0435 \U0440\U0430\U0441\U043f\U043e\U043b\U043e\U0436\U0435\U043d\U044b \U0433\U043b\U0430\U0432\U043d\U044b\U0435 \U0432\U043e\U0440\U043e\U0442\U0430 \U041a\U0440\U0435\U043c\U043b\U044f \U2014 \U0421\U043f\U0430\U0441\U0441\U043a\U0438",

和一百或更多相似的行。

名称数组是:

"\U041c\U043e\U0441\U043a\U043e\U0432\U0441\U043a\U0438\U0439 \U043a\U0440\U0435\U043c\U043b\U044c",
"\U0421\U043f\U0430\U0441\U0441\U043a\U0430\U044f \U0431\U0430\U0448\U043d\U044f",
"\U0410\U0440\U0445\U0430\U043d\U0433\U0435\U043b\U044c\U0441\U043a\U0438\U0439 \U0441\U043e\U0431\U043e\U0440",
"\U0423\U0441\U043f\U0435\U043d\U0441\U043a\U0438\U0439 \U0441\U043e\U0431\U043e\U0440",
"\U0411\U043b\U0430\U0433\U043e\U0432\U0435\U0449\U0435\U043d\U0441\U043a\U0438\U0439 \U0441\U043e\U0431\U043e\U0440",
"\U041a\U043e\U043b\U043e\U043a\U043e\U043b\U044c\U043d\U044f \U0418\U0432\U0430\U043d\U0430 \U0412\U0435\U043b\U0438\U043a\U043e\U0433\U043e",

我不确定它可能会有所帮助,但如果您要求NSLog阵列,那就是..

2 个答案:

答案 0 :(得分:3)

只是不要从对象中取出名称。相反,对对象进行排序,然后获取每个对象的名称以显示在表格上(所以你永远不应该只有一个名单列表)。

从技术上讲,您可以对对象运行搜索(迭代或谓词)以找到具有匹配名称的“one”,但可能存在重复项,并且您可能允许稍后编辑名称以便复制另一个列表是维护问题。您可以保留一个索引,但是当您可以直接使用原始对象列表时,您创建一个容器对象只是为了保存索引。

答案 1 :(得分:2)

查找具有匹配名称的所有对象的一种方法是:

NSMutableArray *array = ...;    // Array of YourObject instances
NSString *wantedName = @"Germany";
NSIndexSet *indexSet = [array indexesOfObjectsPassingTest:^BOOL(id obj, NSUInteger idx, BOOL *stop) {
    YourObject *yourObject = (YourObject *)obj;
    return [yourObject.name isEqualToString:wantedName];
}];

注意:这是区分大小写的匹配。使用以下内容进行不区分大小写的匹配:

return [yourObject.name caseInsensitiveCompare:wantedName] == NSOrderedSame;
相关问题