2017-07-11 56 views
1

你好家伙我有一个字典数组,你们可以告诉我如何根据字典键过滤这些数据。使用谓词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键,在数组中返回匹配的值。

感谢和问候

+0

[使用NSPredicate的字典过滤器数组]的可能重复(https://stackoverflow.com/questions/12084318/filter-array-with-dictionaries-using-nspredicate) –

+0

你可以在https://stackoverflow.com查看它/ questions/12084318/filter-array-with-dictionaries-using-nspredicate –

+0

我已经尝试过这个链接,但不适合我。 @SaurabhPrajapati – sanjeet

回答

8

这会给你你想要的输出

的Objective - C

NSArray *filteredData = [yourArrayContainingDictionary filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"(mall_name contains[c] %@)", searchText]]; 

斯威夫特

let filteredData = yourArrayContainingDictionary.filter{ 
    let string = $0["mall_name"] as! String 

    return string.hasPrefix("searchText") 
} 

希望这有助于你:)

+0

我面对这个类似的问题,这个解决方案为我工作。谢谢。 –

0

这给你的字典与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"; 
    } 
) 
1
NSArray *filtered = [arrName filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"(mall_name == %@)", requiredMailName]]; 
6

试试这个。 (谓语就像SQL查询)

的OBJÇ

NSArray *filterArray = [sourceArray filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"(mall_name contains[c] %@)", searchText]]; 

斯威夫特

var filterArray: [Any] = sourceArray.filter { NSPredicate(format: "(mall_name contains[c] %@)", searchText).evaluate(with: $0) } 

它将返回项名字中含有搜索字符串。

1
NSArray *filtered = [array_with_dict filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"(mall_id == %@)", wantedMallID]]; 
3

使用此为您解决

NSArray *filtered = [yourArrayOfDictionary filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"(mall_name contains[c] %@)", <your search text from search bar>]]; 
1

下面是使用谓词和经典的一个我的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") 
} 
1

更多这样做会是这样的SWIFTY方式

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 $0["mall_name"]!.contains(searchText) 
    } 
    return filteredArray 
} 

let malls = isMatching("Ashoka") 
print(malls)