如何使用任何东西在数组或字典中查找 object
How to find object in Array or dictionary using anything
我有新的工作,目前在objective-c,我不能使用结构等。
请有人帮助我,我需要在 NSArray 中找到价值(或者如果这很容易,我可以将其更改为 NSDictionary)。
I've got NSArray 有 4 部相似的词典。我有子类别-> ID 的密钥。 NSString *titleKey = paramsCell[@"category"];
我需要在所有这些词典中找到这个 ID 并捕获 'Locale' 来确认这个 ID。
NSString *predicate2 = [NSString stringWithFormat:@"_subcategories.id == \"%@\"",titleKey];
NSArray *tempArray = [_categoryDictionary filteredArrayUsingPredicate:[NSPredicate predicateWithFormat: predicate2]];
我尝试了什么:
^^^^ 不行
我尝试将谓词更改为
'NSPredicate *predicate = [NSPredicate predicateWithFormat:titleKey];'
完全看不懂这些%@@%%""@"%"@%"@,想哭.....
拜托,谁能解释一下我该如何解决它。
在 swift 它看起来像 .map{$0.subcategories} 我想
已添加:
for @Larme
我需要在_categoryDic(可以是Array 或Dict,我可以改)Subcategories->id 中找到等于我的titleKey。并捕获 subcategory->Locale,它在 1 个带有 id 的字典中。
我的情况:
我们有细胞,所以当我们从服务器收到细胞时,它们没有名字。我们只收到单元格的类别 ID。我们应该将它的类别与我们的字典进行比较,并将标题放在单元格上(在我们的 categoryDic-> 语言环境中)
在处理 NSArray 时很少需要 NSPredicate。 NSPredicate 的强大功能主要用于核心数据(它可以将它们转换为对数据库的 SQL 调用而不是线性搜索),或者在某些情况下,您有一个非常复杂或高度动态的查询,更容易表示为谓词。
如果您在 Swift 中将其编写为数组上的简单 map/filter,则 ObjC 中的最佳方法是 for-in 循环。
NSMutableArray *results = [NSMutableArray new];
for (NSDictionary *element in _categoryDictionary) {
if ( ... check your condition ... ) {
id value = ... convert element to what you want ...
[results addObject: value];
}
}
(你的问题非常令人困惑,你想过滤什么以及你想要什么转换,所以我只是提供标准的循环结构。你可以填写你的细节。)
如果您真的需要一个谓词,我可以用那种形式重写它,但是您需要更准确地了解您的输入数据是什么以及您期望的输出是什么。你想把它作为一个明确的例子,而不是截图,“这是 ObjC 语法中的输入数组,这是 ObjC 语法中的输出数组。” (但我认为您不需要谓词。)
感谢@Larme 和@Rob Napier 的帮助!
NSString *targetId = @"toFind";
NSMutableArray *results = [NSMutableArray new];
for (NSDictionary *element in _categoryDictionary) {
NSArray *subcategories = element[@"subcategories"];
for (NSDictionary *aSubcategory in subcategories) {
if ([aSubcategory[@"id"] isEqualToString:targetId]) {
[results addObject:aSubcategory[@"locale"]];
}
}
}
我有新的工作,目前在objective-c,我不能使用结构等。
请有人帮助我,我需要在 NSArray 中找到价值(或者如果这很容易,我可以将其更改为 NSDictionary)。
I've got NSArray 有 4 部相似的词典。我有子类别-> ID 的密钥。 NSString *titleKey = paramsCell[@"category"];
我需要在所有这些词典中找到这个 ID 并捕获 'Locale' 来确认这个 ID。
NSString *predicate2 = [NSString stringWithFormat:@"_subcategories.id == \"%@\"",titleKey];
NSArray *tempArray = [_categoryDictionary filteredArrayUsingPredicate:[NSPredicate predicateWithFormat: predicate2]];
我尝试了什么:
^^^^ 不行
我尝试将谓词更改为
'NSPredicate *predicate = [NSPredicate predicateWithFormat:titleKey];'
完全看不懂这些%@@%%""@"%"@%"@,想哭.....
拜托,谁能解释一下我该如何解决它。 在 swift 它看起来像 .map{$0.subcategories} 我想
已添加:
for @Larme
我需要在_categoryDic(可以是Array 或Dict,我可以改)Subcategories->id 中找到等于我的titleKey。并捕获 subcategory->Locale,它在 1 个带有 id 的字典中。
我的情况: 我们有细胞,所以当我们从服务器收到细胞时,它们没有名字。我们只收到单元格的类别 ID。我们应该将它的类别与我们的字典进行比较,并将标题放在单元格上(在我们的 categoryDic-> 语言环境中)
在处理 NSArray 时很少需要 NSPredicate。 NSPredicate 的强大功能主要用于核心数据(它可以将它们转换为对数据库的 SQL 调用而不是线性搜索),或者在某些情况下,您有一个非常复杂或高度动态的查询,更容易表示为谓词。
如果您在 Swift 中将其编写为数组上的简单 map/filter,则 ObjC 中的最佳方法是 for-in 循环。
NSMutableArray *results = [NSMutableArray new];
for (NSDictionary *element in _categoryDictionary) {
if ( ... check your condition ... ) {
id value = ... convert element to what you want ...
[results addObject: value];
}
}
(你的问题非常令人困惑,你想过滤什么以及你想要什么转换,所以我只是提供标准的循环结构。你可以填写你的细节。)
如果您真的需要一个谓词,我可以用那种形式重写它,但是您需要更准确地了解您的输入数据是什么以及您期望的输出是什么。你想把它作为一个明确的例子,而不是截图,“这是 ObjC 语法中的输入数组,这是 ObjC 语法中的输出数组。” (但我认为您不需要谓词。)
感谢@Larme 和@Rob Napier 的帮助!
NSString *targetId = @"toFind";
NSMutableArray *results = [NSMutableArray new];
for (NSDictionary *element in _categoryDictionary) {
NSArray *subcategories = element[@"subcategories"];
for (NSDictionary *aSubcategory in subcategories) {
if ([aSubcategory[@"id"] isEqualToString:targetId]) {
[results addObject:aSubcategory[@"locale"]];
}
}
}