使用不区分大小写的搜索过滤字典

时间:2017-01-19 23:24:59

标签: ios swift3 xcode8

这是关于如何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} 似乎很好地过滤了字典,但我需要搜索不区分大小写。我可以设置选项以将过滤器显示更改为不区分大小写吗?

1 个答案:

答案 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)