【问题标题】:Adding to Dictionary inside a For Loop在 For 循环中添加到字典
【发布时间】:2017-08-23 05:58:36
【问题描述】:

我正在为 Treehouse 的一个项目使用 swift 游乐场。我在向 for 循环内的字典添加附加键:值对时遇到问题。这是我的代码:

var counter = 0
for (var player) in experiencedPlayers {
counter += 1
if counter % 3 == 0 {
    for team in 1...3 {
        switch team {
            case 1:
                teamSharks.append(player)
                player["Team"] = "Sharks"
            case 2:
                teamDragons.append(player)
                player["Team"] = "Dragons"
            case 3:
                teamRaptors.append(player)
                player["Team"] = "Raptors"
            default: break
            }
        }
    }
}

这个方法没有报错,但它应该在玩家的字典中添加“团队”:“鲨鱼”等,但事实并非如此。有什么建议吗?

【问题讨论】:

  • 是的,但是您随后用“猛龙队”覆盖了“团队”的价值。每次执行 player["Team"] = "NewValue" 时,您都在替换之前的值。

标签: swift loops dictionary for-loop


【解决方案1】:

您需要在添加player之前修改player

    switch team {
        case 1:
            player["Team"] = "Sharks"
            teamSharks.append(player)
        case 2:
            player["Team"] = "Dragons"
            teamDragons.append(player)
        case 3:
            player["Team"] = "Raptors"
            teamRaptors.append(player)
        default: break
        }
    }

这是因为player 是一个值类型。

注意,不会对experiencedPlayers中存储的数据产生任何影响,只会对teamSharks等数组产生影响。

【讨论】:

    【解决方案2】:

    因为 player 仅在 for..in 的范围内声明。因此,一旦您尝试对其进行修改,它将仅在此范围内起作用,就像一个副本。如果你想修改,你需要用你修改的对象在你的经验丰富的玩家中重新分配你的播放器

    【讨论】:

      猜你喜欢
      • 2012-06-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多