如何在Swift中的字典中获取最后输入的值?

时间:2017-03-15 02:46:55

标签: swift dictionary

如何在Swift中的字典中输入最后输入的值?例如,我如何获得价值" CCC"从下面:

var dictionary = Dictionary<String, String>()
dictionary.updateValue("AAA", forKey: "111")
dictionary.updateValue("BBB", forKey: "222")
dictionary.updateValue("CCC", forKey: "333")

4 个答案:

答案 0 :(得分:1)

您所追求的通常称为有序词典,即记住已添加项目的顺序的词典。快速谷歌搜索会出现一个可能适合您的GitHub项目。

https://github.com/lukaskubanek/OrderedDictionary

将此作为词典的类型,您可以使用:

dictionary.last // returns Optional(("CCC", "333"))

GitHub页面详细介绍了如何将此类添加到项目中。

答案 1 :(得分:0)

如果您的密钥已排序,您可以尝试:

var dictionary = Dictionary<String, String>()
dictionary.updateValue("AAA", forKey: "111")
dictionary.updateValue("BBB", forKey: "222")
dictionary.updateValue("CCC", forKey: "333")

print(dictionary.keys.sorted().last.map({ ($0, dictionary[$0]!) }))

答案 2 :(得分:0)

字典的全部内容是他们已经订购了。这就是为什么他们的查找通常如此之快,因为他们对元素进行分区而不考虑它们的顺序。

如果您想要特定订单中的商品,则应使用数组。是的,&#34;排序词典&#34;存在,但它们实际上只是数组之上的类字典接口。它们不包含传统词典带来的好处。

如果您认为需要有序字典,则可能需要考虑数据的新结构。

答案 3 :(得分:0)

///如果需要为http构建查询字符串:

let httpBody:[String : String] = [
    "Street"   : "1234 W 1st Street",
    "Building" : "Suite 500",
    "City"           : "Los Angeles",
    "State"          : "CA",
    "Zip"       : "92005"
]

var idx = 0
var queryStr = ""
for (k, v) in httpBody {

    if idx == httpBody.count - 1 {
        queryStr += k + "=" + v
    } else {
       queryStr += k + "=" + v + "&"
       idx += 1
    }
}
print(queryStr)

//Example: for some REST API
//let bodyData:Data = queryStr.data(using: .utf8)!
//request.httpBody = bodyData

//Or this option: 

var newStr = ""
for (k, v) in httpBody {
    let index = httpBody.index(httpBody.startIndex, offsetBy: httpBody.count - 1)
    if k == httpBody.keys[index] {
        newStr += k + "=" + v
    } else {
       newStr += k + "=" + v + "&"
    }
}
print( "\n", newStr)