我有一系列词典:
var array = [["txt":"5mbps", "value": 2048],["txt":"50mbps", "value": 18048],["txt":"55mbps", "value": 22048]]
在这里,我想从字典索引中获取值,其中 txt 正在被选中。如果我选择50mbps,我如何获得该索引并显示相同索引的值。 - 斯威夫特
答案 0 :(得分:12)
获取您可以使用的索引:
let index = array.index(where: {$0["txt"] as! String == "5mbps"})
或获得直接值
array.filter({$0["txt"] as! String == "5mbps"}).first
答案 1 :(得分:3)
也许更好地使用元组数组
var array: [(txt: String, value: Int)] = [
("5mbps", 2048),
("50mbps", 18048),
("55mbps", 22048)
]
Swift 2.3
array.filter { element in
return element.txt == findingText
}.first?.value
Swift 3
array.first { element in
return element.txt == findingText
}?.value
答案 2 :(得分:1)
使用过滤器
func searchValue(txt: String) -> Int? {
if let f = (array.filter { $0["txt"] == txt }).first, value = f["value"] as? Int {
return value
}
return nil
}
searchValue("5mbps") // 2048
searchValue("50mbps") // 18048
searchValue("55mbps") // 22048
答案 3 :(得分:0)
如果案例直接从字典中获取基于给定索引的值(不使用字典“txt”的键):
let givenIndexForArray = 1
if let value = array[givenIndexForArray]["value"] {
print(value) // 18048
}
如果案例根据词典的键获取值,您可能会遇到重复:
如果重复,您需要获取值数组:
let givenKey = "50mbps"
let valueArray = array.filter { // [Optional(18048)]
// assuming that the key is ALWAYS "txt", or value will be an empty array
$0["txt"] == givenKey
}
.map {
// assuming that the value is ALWAYS "value", or value will be an empty array
$0["value"]
}
所以,假设您的数组看起来像这样(“50mbps”键是重复的):
var array = [["txt":"5mbps", "value": 2048],["txt":"50mbps", "value": 18048],["txt":"50mbps", "value": 22048]]
通过应用上面的代码段,输出应为: [可选(18048),可选(22048)] 。
最后,如果案例只是为了获得一个值(或者第一个是否存在重复),请从同一个.first
数组中获取valueArray
:< / p>
let first = valueArray.first // 18048
答案 4 :(得分:0)
最新的Swift :index(where:)
已被弃用,您必须使用firstIndex(where:)
函数。
let index = array.firstIndex(where: { ( $0["yourKey"] as? String == "compareWithValue" ) } )
请注意,此index
是可选的,因此您可以根据需要对它进行适当的检查。