更改特定键的值也会更改其他键的值
Changing value of specific key changes the value of other keys as well
这就是我生成 dutyList 的方式。
val dutyList = ArrayList<Triple<Int, String, ArrayList<Pair<String, String>>>>()
val dateShiftPair = ArrayList<Pair<String, String>>()
dateList.forEach {date ->
dateShiftPair.add(Pair(date, "E"))
}
staffList.forEach {staff ->
dutyList.add(Triple(list.indexOf(staff), staff.name!!, dateShiftPair))
}
这应该会改变该对的第二个值
override fun onShiftChange(pos: Int, datePos: Int, shift: String) {
val pair = Pair(staffList[pos].third[datePos].first, shift)
staffListUpdated[pos].third[datePos] = pair
}
但它会更改 pos 中的其他值,也就是说,如果我更改 staffListUpdated[0].third[0] = pair它也改变了 staffListUpdated[1].third[0] = pair。我尝试了很多方法,但没有任何帮助。
[
{
"first": 0,
"second": "Ralph",
"third": [
{
"first": "3/5",
"second": "G" //change should happen here only
},
{
"first": "4/5",
"second": "E"
},
{
"first": "6/5",
"second": "E"
}
]
},
{
"first": 1,
"second": "Mike",
"third": [
{
"first": "3/5",
"second": "G" //but change happens here as well.
},
{
"first": "4/5",
"second": "E"
},
{
"first": "5/5",
"second": "E"
}
]
}
]
在
staffList.forEach {staff ->
dutyList.add(Triple(list.indexOf(staff), staff.name!!, dateShiftPair))
}
您对每个 Triple
使用相同的列表实例。
这意味着,如果您获得 Triple
之一的列表并更改某些内容,您会为每个 Triple
.
更改它
一个解决方案是在插入或修改时复制列表。
您还需要对列表进行深拷贝。因为如果您对列表进行浅表复制,Pair
的实例仍然相同,并且如果您随后更改其中一个,您将(再次)为每个 Triple
.[=16= 更改它]
这就是我生成 dutyList 的方式。
val dutyList = ArrayList<Triple<Int, String, ArrayList<Pair<String, String>>>>()
val dateShiftPair = ArrayList<Pair<String, String>>()
dateList.forEach {date ->
dateShiftPair.add(Pair(date, "E"))
}
staffList.forEach {staff ->
dutyList.add(Triple(list.indexOf(staff), staff.name!!, dateShiftPair))
}
这应该会改变该对的第二个值
override fun onShiftChange(pos: Int, datePos: Int, shift: String) {
val pair = Pair(staffList[pos].third[datePos].first, shift)
staffListUpdated[pos].third[datePos] = pair
}
但它会更改 pos 中的其他值,也就是说,如果我更改 staffListUpdated[0].third[0] = pair它也改变了 staffListUpdated[1].third[0] = pair。我尝试了很多方法,但没有任何帮助。
[
{
"first": 0,
"second": "Ralph",
"third": [
{
"first": "3/5",
"second": "G" //change should happen here only
},
{
"first": "4/5",
"second": "E"
},
{
"first": "6/5",
"second": "E"
}
]
},
{
"first": 1,
"second": "Mike",
"third": [
{
"first": "3/5",
"second": "G" //but change happens here as well.
},
{
"first": "4/5",
"second": "E"
},
{
"first": "5/5",
"second": "E"
}
]
}
]
在
staffList.forEach {staff ->
dutyList.add(Triple(list.indexOf(staff), staff.name!!, dateShiftPair))
}
您对每个 Triple
使用相同的列表实例。
这意味着,如果您获得 Triple
之一的列表并更改某些内容,您会为每个 Triple
.
一个解决方案是在插入或修改时复制列表。
您还需要对列表进行深拷贝。因为如果您对列表进行浅表复制,Pair
的实例仍然相同,并且如果您随后更改其中一个,您将(再次)为每个 Triple
.[=16= 更改它]