使用谓词 iOS SDK 从字典数组中过滤数据
Filter data from array of Dictionary using predicate iOS SDK
大家好,我有一个字典数组,你们能告诉我如何根据字典键过滤这些数据吗?
(
{
"mall_id" = M0550;
"mall_name" = "Amrita Shopping Complex";
},
{
"mall_id" = M0509;
"mall_name" = "Ashoka Market";
},
{
"mall_id" = M0943;
"mall_name" = "Biju Pattnaik Commercial Complex";
},
{
"mall_id" = M0457;
"mall_name" = "BMC Bhawani Mall";
},
{
"mall_id" = M0460;
"mall_name" = "BMC Keshari Mall";
},
{
"mall_id" = M0571;
"mall_name" = "BMC Market Complex";
},
{
"mall_id" = M0453;
"mall_name" = "Forum Mart";
},
{
"mall_id" = M0609;
"mall_name" = "Indradhanu Market";
},
{
"mall_id" = M0558;
"mall_name" = "Kalyani Plaza Market Complex";
},
{
"mall_id" = M0463;
"mall_name" = "Maa Barabhuja Mall";
},
{
"mall_id" = M0553;
"mall_name" = "Mahaveer Complex";
},
{
"mall_id" = M0570;
"mall_name" = "Market Building";
},
{
"mall_id" = M0452;
"mall_name" = "Pal Heights Mall";
},
{
"mall_id" = M0466;
"mall_name" = "Priyadarshini Market Complex";
},
{
"mall_id" = M0677;
"mall_name" = "Ruchika Market";
},
{
"mall_id" = M0504;
"mall_name" = "Shubham Market Complex";
},
{
"mall_id" = M0564;
"mall_name" = "Subhadra Complex";
},
{
"mall_id" = M0559;
"mall_name" = "Sultania Shopping Complex";
},
{
"mall_id" = M0552;
"mall_name" = "Tathastu Complex";
},
{
"mall_id" = M0568;
"mall_name" = "Western Tower Market Building";
}
)
我想要实现的目标,每当我在搜索栏中输入任何内容时,它都会检查 mall_name 键和 return 数组中的匹配值。
感谢和问候
这为您提供了一组只有 requiredMallID
的字典
NSArray *filtered = [array_with_dict filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"(mall_id == %@)", requiredMallID]];
例如,
NSArray *filtered = [array_with_dict filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"(mall_id == %@)", "M0550"]];
给你
(
{
"mall_id" = M0550;
"mall_name" = "Amrita Shopping Complex";
}
)
这将为您提供所需的输出
Objective - C
NSArray *filteredData = [yourArrayContainingDictionary filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"(mall_name contains[c] %@)", searchText]];
Swift
let filteredData = yourArrayContainingDictionary.filter{
let string = [=11=]["mall_name"] as! String
return string.hasPrefix("searchText")
}
希望对您有所帮助:)
NSArray *filtered = [arrName filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"(mall_name == %@)", requiredMailName]];
试试这个。 (谓词的工作方式类似于 SQL 查询)
对象 C
NSArray *filterArray = [sourceArray filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"(mall_name contains[c] %@)", searchText]];
Swift
var filterArray: [Any] = sourceArray.filter { NSPredicate(format: "(mall_name contains[c] %@)", searchText).evaluate(with: [=11=]) }
它将 return 个名称包含搜索字符串的条目。
NSArray *filtered = [array_with_dict filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"(mall_id == %@)", wantedMallID]];
使用此解决方案
NSArray *filtered = [yourArrayOfDictionary filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"(mall_name contains[c] %@)", <your search text from search bar>]];
这是我使用谓词和经典版本的 2 个版本:
let dict = [
[
"mall_id": 1,
"mall_name": "Amrita Shopping Complex"
],
[
"mall_id": 2,
"mall_name": "Ashoka Market"
] ]
// Example using Predicate
let mallNamePredicate = NSPredicate(format: "mall_name contains %@", "Ashoka")
let filteredWithPredicate = (dict as NSArray).filtered(using: mallNamePredicate)
// Classical filter example
let filtered = dict.filter { pair in
guard let mallName = pair["mall_name"] as? String else { return false }
return mallName.hasPrefix("Ashoka")
}
更快捷的方法是
let mallArray = [
[
"mall_id": "M0550",
"mall_name": "Amrita Shopping Complex"
],
[
"mall_id": "M0509",
"mall_name": "Ashoka Market"
]
]
func isMatching(_ searchText: String) -> [[String: Any]] {
let filteredArray = mallArray.filter {
return [=10=]["mall_name"]!.contains(searchText)
}
return filteredArray
}
let malls = isMatching("Ashoka")
print(malls)
他想搜索 mall_name 上的 部分 匹配项,而不是 mall_id,随着用户在搜索栏。所以正确的解决方案是:
[NSPredicate predicateWithFormat:@"(mall_name contains[c] %@)", searchText]
... 不是 'mall_id',不是 @"(xxx == %@)",'contains[c]' 给了他 case-insensitive 匹配。
大家好,我有一个字典数组,你们能告诉我如何根据字典键过滤这些数据吗?
(
{
"mall_id" = M0550;
"mall_name" = "Amrita Shopping Complex";
},
{
"mall_id" = M0509;
"mall_name" = "Ashoka Market";
},
{
"mall_id" = M0943;
"mall_name" = "Biju Pattnaik Commercial Complex";
},
{
"mall_id" = M0457;
"mall_name" = "BMC Bhawani Mall";
},
{
"mall_id" = M0460;
"mall_name" = "BMC Keshari Mall";
},
{
"mall_id" = M0571;
"mall_name" = "BMC Market Complex";
},
{
"mall_id" = M0453;
"mall_name" = "Forum Mart";
},
{
"mall_id" = M0609;
"mall_name" = "Indradhanu Market";
},
{
"mall_id" = M0558;
"mall_name" = "Kalyani Plaza Market Complex";
},
{
"mall_id" = M0463;
"mall_name" = "Maa Barabhuja Mall";
},
{
"mall_id" = M0553;
"mall_name" = "Mahaveer Complex";
},
{
"mall_id" = M0570;
"mall_name" = "Market Building";
},
{
"mall_id" = M0452;
"mall_name" = "Pal Heights Mall";
},
{
"mall_id" = M0466;
"mall_name" = "Priyadarshini Market Complex";
},
{
"mall_id" = M0677;
"mall_name" = "Ruchika Market";
},
{
"mall_id" = M0504;
"mall_name" = "Shubham Market Complex";
},
{
"mall_id" = M0564;
"mall_name" = "Subhadra Complex";
},
{
"mall_id" = M0559;
"mall_name" = "Sultania Shopping Complex";
},
{
"mall_id" = M0552;
"mall_name" = "Tathastu Complex";
},
{
"mall_id" = M0568;
"mall_name" = "Western Tower Market Building";
}
)
我想要实现的目标,每当我在搜索栏中输入任何内容时,它都会检查 mall_name 键和 return 数组中的匹配值。
感谢和问候
这为您提供了一组只有 requiredMallID
NSArray *filtered = [array_with_dict filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"(mall_id == %@)", requiredMallID]];
例如,
NSArray *filtered = [array_with_dict filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"(mall_id == %@)", "M0550"]];
给你
(
{
"mall_id" = M0550;
"mall_name" = "Amrita Shopping Complex";
}
)
这将为您提供所需的输出
Objective - C
NSArray *filteredData = [yourArrayContainingDictionary filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"(mall_name contains[c] %@)", searchText]];
Swift
let filteredData = yourArrayContainingDictionary.filter{
let string = [=11=]["mall_name"] as! String
return string.hasPrefix("searchText")
}
希望对您有所帮助:)
NSArray *filtered = [arrName filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"(mall_name == %@)", requiredMailName]];
试试这个。 (谓词的工作方式类似于 SQL 查询)
对象 C
NSArray *filterArray = [sourceArray filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"(mall_name contains[c] %@)", searchText]];
Swift
var filterArray: [Any] = sourceArray.filter { NSPredicate(format: "(mall_name contains[c] %@)", searchText).evaluate(with: [=11=]) }
它将 return 个名称包含搜索字符串的条目。
NSArray *filtered = [array_with_dict filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"(mall_id == %@)", wantedMallID]];
使用此解决方案
NSArray *filtered = [yourArrayOfDictionary filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"(mall_name contains[c] %@)", <your search text from search bar>]];
这是我使用谓词和经典版本的 2 个版本:
let dict = [
[
"mall_id": 1,
"mall_name": "Amrita Shopping Complex"
],
[
"mall_id": 2,
"mall_name": "Ashoka Market"
] ]
// Example using Predicate
let mallNamePredicate = NSPredicate(format: "mall_name contains %@", "Ashoka")
let filteredWithPredicate = (dict as NSArray).filtered(using: mallNamePredicate)
// Classical filter example
let filtered = dict.filter { pair in
guard let mallName = pair["mall_name"] as? String else { return false }
return mallName.hasPrefix("Ashoka")
}
更快捷的方法是
let mallArray = [
[
"mall_id": "M0550",
"mall_name": "Amrita Shopping Complex"
],
[
"mall_id": "M0509",
"mall_name": "Ashoka Market"
]
]
func isMatching(_ searchText: String) -> [[String: Any]] {
let filteredArray = mallArray.filter {
return [=10=]["mall_name"]!.contains(searchText)
}
return filteredArray
}
let malls = isMatching("Ashoka")
print(malls)
他想搜索 mall_name 上的 部分 匹配项,而不是 mall_id,随着用户在搜索栏。所以正确的解决方案是:
[NSPredicate predicateWithFormat:@"(mall_name contains[c] %@)", searchText]
... 不是 'mall_id',不是 @"(xxx == %@)",'contains[c]' 给了他 case-insensitive 匹配。