nir*_*rav 1 arrays dictionary swift
我有一个字典数组,我尝试使用其中一个键过滤前缀如下:
let b = [["id":1,"name":"India"],["id":2,"name":"america"],["id":3,"name":"africa"],["id":4,"name":"indonesia"],["id":5,"name":"jakarta"],["id":6,"rec_name":"Zimba"]]
let g = b.filter({String(describing: $0["name"]).hasPrefix("I")})
print(g) //retun Empty array
Run Code Online (Sandbox Code Playgroud)
如果我尝试,contains
那么它工作正常
要么
如果我只尝试纯String数组,那么它也可以正常工作
谢谢,
由于你的array(b
)包含name
并不总是存在的字典(你有一个对象rec_name
),你可以修改你的过滤器:
let g = b.filter {
guard let name = $0["name"] as? String else { return false }
return name.hasPrefix("I")
}
Run Code Online (Sandbox Code Playgroud)
从而确保只有具有该键值的字典与您的过滤器匹配
有趣的事实:当我们做这样的事情时,原始代码不起作用的原因(正如Martin指出的那样)非常明显:
let g = b.map({String(describing: $0["name"])})
print(g)
Run Code Online (Sandbox Code Playgroud)
哪个印刷品:
["Optional(\"India \")","可选(\"america \")","可选(\"africa \")","可选(\"indonesia \")","可选(\" jakarta \")","nil"]