在特定点将字典A值添加到字典B?

时间:2016-06-03 21:43:34

标签: swift

我一直试图选择解决这个问题的方法,但是他有运气。

这是我试图解决的问题。

问题

我有两本词典。 Dictionary AArray of DictionariesDictionary 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中覆盖此数组,以显示用户已将其解锁。

2 个答案:

答案 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.

将返回一组仅解锁的枪支。 MapFilterReduce是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"
  }
}

希望这有帮助!