如何从字典数组中获取字典索引?

时间:2016-12-16 08:14:19

标签: arrays swift dictionary

我有一系列词典:

var array = [["txt":"5mbps", "value": 2048],["txt":"50mbps", "value": 18048],["txt":"55mbps", "value": 22048]]

在这里,我想从字典索引中获取,其中 txt 正在被选中。如果我选择50mbps,我如何获得该索引并显示相同索引的。 - 斯威夫特

5 个答案:

答案 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是可选的,因此您可以根据需要对它进行适当的检查。