如何在Swift中的字典中输入最后输入的值?例如,我如何获得价值" CCC"从下面:
var dictionary = Dictionary<String, String>()
dictionary.updateValue("AAA", forKey: "111")
dictionary.updateValue("BBB", forKey: "222")
dictionary.updateValue("CCC", forKey: "333")
答案 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)