这是关于如何Filter a Dictionary的后续问题,我只需要过滤器不区分大小写
我有一个字典,用于填充Swift 3中的Pickerview。
var facilityDict: [Int: [String: String]] = [:]
17:[“id”:“199”,“facilitycode”:“036”,“location_name”:“Centerpoint” 医疗办公室“],
41:[“id”:“223”,“facilitycode”:“162”, “location_name”:“暗岭医疗中心”],
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
在数据更改时触发,我用它来创建一个搜索变量。如果有人输入“ar”,我想过滤字典中包含字符“ar”的所有内容,以便我可以使用原始大字典列表的小得多的子部分重置Picker列表。
过滤器
let filteredDictionaries = facilityDict.filter{$0.value.contains(where: {$0.value.contains("ar")})}.map{$0.value}
似乎很好地过滤了字典,但我需要搜索不区分大小写。我可以设置选项以将过滤器显示更改为不区分大小写吗?
答案 0 :(得分:2)
包含方法与SerialNumbers
相同,没有任何选项。您只需要使用String!= nil和caseInsensitive选项的范围:
range(of: "String") != nil
现在你可以做到:
extension String {
func contains(_ string: String, options: CompareOptions) -> Bool {
return range(of: string, options: options) != nil
}
}
如果您需要从字典数组中创建字典,则需要使用forEach迭代结果并从中重建字典:
"whatever".contains("ER", options: .caseInsensitive)