gpt4 book ai didi

arrays - 数组中的最后一个元素覆盖所有先前的元素

转载 作者:行者123 更新时间:2023-11-30 12:02:02 25 4
gpt4 key购买 nike

我正在尝试将 JSON 中的数据保存到数组中,但最后一项会覆盖以前的值。我有一个用于存储学生信息的学生类和用于存储学生技能的技能类。

public class Skill {
public var id : Int = 0
public var name : String = ""
public var level : Double = 0.0

func description() -> String {
return "ID: \(id), " +
"name: \(name), " +
"level: \(level)"
}
}

学生类

public class Student {

public var studentSkills = Array<Skill>()


func setCursusUsers(data: [[String: AnyObject]]) {
for item in data {
let skills = Skill()
if let resData = item["skills"] {
let stu_data = resData as! [[String: AnyObject]]
for skill_item in stu_data {
skills.id = skill_item["id"] as? Int ?? 0
skills.level = skill_item["level"] as? Double ?? 0.0
skills.name = skill_item["name"] as? String ?? ""
studentSkills.append(skills)
print(studentSkills[studentSkills.count - 1].description())
}
for skill in studentSkills {
print(skill.description())
}
}
}
}
}

我循环遍历技能数组并将其附加到我的 studentSkills 数组中,并打印最后附加的值,并打印出正确的值。

for skill_item in stu_data {
skills.id = skill_item["id"] as? Int ?? 0
skills.level = skill_item["level"] as? Double ?? 0.0
skills.name = skill_item["name"] as? String ?? ""
studentSkills.append(skills)
print(studentSkills[studentSkills.count - 1].description())
}

上面 for 循环内 print 的输出

ID: 16, name: Company experience, level: 11.34
ID: 4, name: Unix, level: 7.4
ID: 17, name: Object-oriented programming, level: 4.59
ID: 3, name: Rigor, level: 3.24
ID: 7, name: Group & interpersonal, level: 3.02
ID: 2, name: Imperative programming, level: 2.98
ID: 6, name: Web, level: 2.32
ID: 13, name: Organization, level: 1.8
ID: 14, name: Adaptation & creativity, level: 1.14
ID: 5, name: Graphics, level: 1.12
ID: 10, name: Network & system administration, level: 0.98
ID: 12, name: DB & Data, level: 0.87
ID: 15, name: Technology integration, level: 0.82
ID: 1, name: Algorithms & AI, level: 0.76
ID: 11, name: Security, level: 0.45

当我在上述 for 循环之外运行以下代码时

for skill in studentSkills {
print(skill.description())
}

我得到以下输出

ID: 11, name: Security, level: 0.45
ID: 11, name: Security, level: 0.45
ID: 11, name: Security, level: 0.45
ID: 11, name: Security, level: 0.45
ID: 11, name: Security, level: 0.45
ID: 11, name: Security, level: 0.45
ID: 11, name: Security, level: 0.45
ID: 11, name: Security, level: 0.45
ID: 11, name: Security, level: 0.45
ID: 11, name: Security, level: 0.45
ID: 11, name: Security, level: 0.45
ID: 11, name: Security, level: 0.45
ID: 11, name: Security, level: 0.45
ID: 11, name: Security, level: 0.45
ID: 11, name: Security, level: 0.45
ID: 11, name: Security, level: 0.45
ID: 11, name: Security, level: 0.45
ID: 11, name: Security, level: 0.45
ID: 11, name: Security, level: 0.45
ID: 11, name: Security, level: 0.45
ID: 11, name: Security, level: 0.45
ID: 11, name: Security, level: 0.45
ID: 11, name: Security, level: 0.45
ID: 11, name: Security, level: 0.45
ID: 11, name: Security, level: 0.45
ID: 11, name: Security, level: 0.45
ID: 11, name: Security, level: 0.45
ID: 11, name: Security, level: 0.45
ID: 11, name: Security, level: 0.45
ID: 11, name: Security, level: 0.45
ID: 7, name: Group & interpersonal, level: 0.21
ID: 7, name: Group & interpersonal, level: 0.21
ID: 7, name: Group & interpersonal, level: 0.21
ID: 7, name: Group & interpersonal, level: 0.21

这是我的 JSON 的结构

"cursus_users" : [
{
"skills" : [
...,
...,
...,
...,
...,
...,
...,
...,
{
"id" : 11,
"name" : "Security",
"level" : 0.45
}
],
...
},
{
"skills" : [
...,
...,
...,
{
"id" : 7,
"name" : "Group & interpersonal",
"level" : 0.21
}
],
...
}
]

技能数组的最后一个元素覆盖了前面的元素,我该如何解决这个问题?

最佳答案

您总是将相同的技能附加到数组中。每次在 for 循环中修改它。您应该每次都创建新的技能

for skill_item in stu_data {
let skills = Skill()
...
}

如果 Skill 是值类型 (struct),但它是引用类型 (class) 并指向同一个对象。

关于arrays - 数组中的最后一个元素覆盖所有先前的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47098726/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com