我是swift的初学者,我试图理解词典的概念。
我有两个NSDictionary,它们都包含相同的键,如下所示:
var currencyname: NSDictionary = [
"CNY": "Chinese Yuan",
"PLN": "Polish Zloty"
]
var rawrates NSDictionary = [
"CNY": "1.34",
"PLN": "1.456"
]
我正在尝试将它们组合在一起,以便我只得到一个词典,例如:
["CNY": "Chinese Yuan","1.34"]
["PLN": "Polish Zloty","1.456"]
我想我的第一个问题是我应该输出什么类型的变量?我可以使用NSDictionary吗?通过阅读文档,我的理解是NSDictionaries通过成对的键/值来工作。是否可以在字典中放入两个值?
我的第二个问题是我应该如何组合这两个词典,我试图使用下面的代码而没有太大的成功
for (currency, rawrate) in rawrates {
for (currencyid, name) in currencyname{
if currency == currencyid {
rawrates.append(name as String)
}
}
}
答案 0 :(得分:2)
您可以按如下方式创建元组字典:
let currencyname:[String:String] = ["CNY": "Chinese Yuan", "PLN": "Polish Zloty"]
let rawrates:[String:String] = ["CNY": "1.34", "PLN": "1.456"]
var combinedDictionary:[String:(name:String,rate:String)] = [:]
for key in currencyname.keys.array {
combinedDictionary[key] = (currencyname[key]!,rawrates[key]!)
}
// Testing
combinedDictionary["PLN"]! // (.0 "Polish Zloty", .1 "1.456")
combinedDictionary["PLN"]!.name // "Polish Zloty"
combinedDictionary["PLN"]!.rate // "1.456"
combinedDictionary["CNY"]! // (.0 "Chinese Yuan", .1 "1.34")
combinedDictionary["CNY"]!.name // "Chinese Yuan"
combinedDictionary["CNY"]!.rate // "1.34"
答案 1 :(得分:1)
我们不能以这种方式完全组合字典。问题是,字典只允许每个键一个值。
解决方案是改为使用类似这样的字典:
step
因此我们的密钥为[
"CNY" : ["Chinese Yuan","1.34"],
"PLN" : ["Polish Zloty","1.456"]
]
和"CNY"
,但每个密钥都有一个数组值。
以下是组合词典的一种可能解释:
"PLN"
但老实说,这里最有意义的是可能只是为了掌握我们所有的货币信息。
var combinedDict = [String:Array<Any>]()
for key in currencyName.allKeys {
combinedDict[key] = [currencyName[key], rawRates[key]]
}
println(combinedDict)
现在构建这些对象的字典:
struct Currency {
let name: String?
let rawRate: String?
}
答案 2 :(得分:0)
另一个简单的答案,使用字符串插值并且类型安全:
var currencyName = ["CNY":"Chinese Yuan", "PLN": "Polish Zloty"]
var rawRates = ["CNY":"1.34" , "PLN":"1.456"]
var combined = [String:String]()
for (ccyCode, ccyName) in currencyName
{
if let possibleRate = rawRates[ccyCode]
{
combined[ccyCode] = "\(ccyName), \(possibleRate)"
}
else
{
combined[ccyCode] = "\(ccyName), N/A"
}
}