我一直试图选择解决这个问题的方法,但是他有运气。
这是我试图解决的问题。
问题
我有两本词典。Dictionary A
是Array of Dictionaries
,Dictionary B
也是Array of Dictionaries
。 (见下面的例子)。
当应用推出时,它会从Firebase数据库中抓取Dictionary A
并将其存储在var dict
中。然后,它会从位于特定用户数据下的Firebase数据库中抓取Dictionary B
。
我需要将Dictionary B
中的值放入Dictionary A
中的特定位置。
Dictionary A
包含您可以使用积分解锁的游戏中的项目。 Dictionary B
包含特定用户已解锁的所有枪支。
字典A(例子)
let items : [[String:String]] = [
[
"type" : "Star 1",
"model" : "Jungle Spray",
"available" : "no",
"rarity" : "normal",
"totalOwned" : "1",
"price" : "9,999"
],
[
"type" : "Star 1",
"model" : "Predator",
"available" : "no",
"rarity" : "normal",
"totalOwned" : "1",
"price" : "10,500"
],
[
"type" : "Star 1",
"model" : "Safari Mesh",
"available" : "no",
"rarity" : "normal",
"totalOwned" : "1",
"price" : "12,950"
],
字典B(例子)
let userUnlocked : [[String: String]] = [
[
"type" : "Star 1",
"model" : "Predator",
"available" : "yes",
"rarity" : "normal",
"totalOwned" : "1",
"price" : "9,999"
]
]
正如您所看到的,唯一改变的是值available
设置为yes
。这意味着该特定用户已解锁此枪。因此,我需要在Dictionary A
中覆盖此数组,以显示用户已将其解锁。
答案 0 :(得分:1)
术语可能有点令人困惑。字典没有特定的顺序。数组做。您可以使用Array方法insert(_:atIndex :)插入items数组。
另请注意,如果数组被声明为let,则无法添加(需要将其更改为var)。
userUnlocked.insert(items[0], atIndex: 1)
提示强> 您也可以考虑使用单个阵列并为“unlocked”添加字段。然后你可以轻松地抓住你想要的枪支:
items.map() { $0.unlocked == true } //just an example, and wont work like this on your current dictionaries.
将返回一组仅解锁的枪支。 Map
,Filter
和Reduce
是Swift中的高阶函数!
答案 1 :(得分:1)
我不确定您是如何跟踪数组的索引以了解您想要修改项目的原因,但是如果您想要的是访问userUnlock中某个词典中的值并将项目中的值设置为等于那个。见下文:
1)如果要修改项目,则必须将其更改为var而不是let,这使其成为常量
2)让我们假设您要为"可用"设置值。键入第一个字典中的项目值为"可用" userUnlock中第二个字典中的键
items[0]["available"] = userUnlocked[1]["available"]
在这行代码之后:
var items : [[String:String]] = [
[
"type" : "Star 1",
"model" : "Jungle Spray",
"available" : "yes",
"rarity" : "normal",
"totalOwned" : "1",
"price" : "9,999"
],
[
"type" : "Star 1",
"model" : "Predator",
"available" : "no",
"rarity" : "normal",
"totalOwned" : "1",
"price" : "10,500"
],
[
"type" : "Star 1",
"model" : "Safari Mesh",
"available" : "no",
"rarity" : "normal",
"totalOwned" : "1",
"price" : "12,950"
]
]
注意:回复您的评论
for i in 0...items.count-1
{
if items[i]["model"] == "Predator"
{
items[i]["available"] = "yes"
}
}
希望这有帮助!