过滤字典与不区分大小写的search

这是一个关于如何过滤字典的后续问题,只需要filter是不区分大小写的

我有一个在Swift 3中填充Pickerview的字典。

var facilityDict: [Int: [String: String]] = [:] 

17:[“id”:“199”,“facilitycode”:“036”,“location_name”:“Centerpoint Medical Offices”],
41:[“id”:“223”,“facilitycode”:“162”,“location_name”:“Dark Ridge Medical Center”],
14:[“id”:“196”,“facilitycode”:“023”,“location_name”:“Spinnerpark”],
20:[“id”:“202”,“facilitycode”:“048”,“location_name”:“教育剧院”],
30:[“id”:“212”,“facilitycode”:“090”,“location_name”:“合作伙伴医疗机构”],
49:[“id”:“231”,“facilitycode”:“223”,“location_name”:“GreenBay行政办公室”]

这本词典很长。 我有一个Textbox ,当数据改变时触发,我用它来创build一个searchvariables。 如果有人input“ar”,我想过滤字典中包含字符“ar”的所有东西,这样我就可以用原来的Big Dictionary列表中的一个小得多的部分来重置Picker列表。

filterlet filteredDictionaries = facilityDict.filter{$0.value.contains(where: {$0.value.contains("ar")})}.map{$0.value}好像过滤字典,但是我需要search不区分大小写。 有没有我可以设置更改filter显示不区分大小写的选项?

包含方法与range(of: "String") != nil相同range(of: "String") != nil没有任何选项。 所有你需要的是使用范围的string!=无caseInsensitive选项:

 extension String { func contains(_ string: String, options: CompareOptions) -> Bool { return range(of: string, options: options) != nil } } 

现在你可以做:

 "whatever".contains("ER", options: .caseInsensitive) 

如果您需要从字典数组中创build字典,则需要使用forEach遍历结果并从中重新生成字典:


 let facilityDict: [Int: [String: String]] = [ 17: ["id": "199", "facilitycode": "036", "location_name": "Centerpoint Medical Offices"], 41: ["id": "223", "facilitycode": "162", "location_name": "Dark Ridge Medical Center"], 14: ["id": "196", "facilitycode": "023", "location_name": "Spinnerpark"], 20: ["id": "202", "facilitycode": "048", "location_name": "Educational Theater"], 30: ["id": "212", "facilitycode": "090", "location_name": "Partner Medical Offices"], 49: ["id": "231", "facilitycode": "223", "location_name": "GreenBay Administrative Offices"]] var filtered: [Int: [String: String]] = [:] facilityDict.filter{$0.value.contains{$0.value.contains("AR", options: .caseInsensitive)}}.forEach{filtered[$0.key] = $0.value} print(filtered) // [30: ["id": "212", "facilitycode": "090", "location_name": "Partner Medical Offices"], 41: ["id": "223", "facilitycode": "162", "location_name": "Dark Ridge Medical Center"], 14: ["id": "196", "facilitycode": "023", "location_name": "Spinnerpark"]]