我是Swift编程的新手。对于我的特定项目,我试图用一些用户输入过滤字典,字典的值由一个数组组成。
以下是一些示例代码,以及我要完成的任务:
var dictionary = ["a": ["aberration", "abc"], "b" : ["babel", "bereft"]]
var filteredDictionary = [String: [String]]()
var searchText = "aberration"
//getting the first letter of string
var firstLetter = searchText[searchText.startIndex]
使用这个特定的searchText,我试图得到:
filteredDictionary = ["a": ["aberration"]]
编辑:我希望字典以第一个字母作为其键返回,以及与searchText匹配的值。对不起,如果我不清楚。
这是我尝试过的一些代码,但很明显,我无法让它工作:
filteredDictionary = dictionary.filter{$0.key == firstLetter && for element in $0.value { element.hasPrefix(searchText) }}
任何帮助将不胜感激。感谢。
答案 0 :(得分:2)
这是一个基于搜索映射值的解决方案,然后过滤掉空结果。
var dictionary = ["a": ["aberration", "abc"], "b" : ["babel", "bereft"]]
var searchText = "aberration"
let filteredDictionary = dictionary.mapValues { $0.filter { $0.hasPrefix(searchText) } }.filter { !$0.value.isEmpty }
print(filteredDictionary)
输出:
[“a”:[“畸变”]]
答案 1 :(得分:0)
let firstLetter = String(searchText[searchText.startIndex])
let filteredDictionary = dictionary
.reduce(into: [String: [String]]()) { (result, object) in
if object.key == firstLetter {
let array = object.value.filter({ $0.hasPrefix(searchText) })
if array.count > 0 {
result[object.key] = array
}
}
}
输出:
[" a":["畸变"]]
答案 2 :(得分:0)
试试这个:
var dictionary = ["a": ["aberration", "abc"], "b" : ["babel", "bereft"]]
var searchText = "aberration"
var filteredDictionary = dictionary.filter { (key, value) -> Bool in
return (value as! [String]).contains(searchText)
}.mapValues { (values) -> [String] in
return [searchText]
}
print(filteredDictionary)
您可以结合使用 filter
和 map
来获得所需的结果。
<强>输出:强>
["a": ["aberration"]]