【发布时间】:2020-05-01 04:49:48
【问题描述】:
我有一个具有此定义的对象列表:
type MyObject struct {
ID int `json:"id"`
Level int `json:"level"`
CityID int `json:"city_id"`
}
我想根据CityID 对它们进行分类,以便获得一个列表列表,其中每个内部列表的项目都具有相同的CityID。
例如,如果我有以下列表:
[
MyObject {ID: 1, Level: 12, CityID: 7},
MyObject {ID: 2, Level: 15, CityID: 2},
MyObject {ID: 3, Level: 55, CityID: 4},
MyObject {ID: 4, Level: 88, CityID: 7},
MyObject {ID: 5, Level: 11, CityID: 4},
MyObject {ID: 6, Level: 5, CityID: 7},
MyObject {ID: 7, Level: 42, CityID: 2}
]
我需要以下输出:
[
[MyObject {ID: 1, Level: 12, CityID: 7}, MyObject {ID: 4, Level: 88, CityID: 7}, MyObject {ID: 6, Level: 5, CityID: 7}],
[MyObject {ID: 2, Level: 15, CityID: 2}, MyObject {ID: 7, Level: 42, CityID: 2}],
[MyObject {ID: 3, Level: 55, CityID: 4}, MyObject {ID: 5, Level: 11, CityID: 4}]
]
我知道在 python 中使用itertools 是可能的,但我是go 的新手,对它的库知之甚少。有什么帮助吗?
编辑 1:
我目前正在使用这个:
m := make(map[int][]MyObject)
for _, item := range myList {
if val, ok := m[item.CityID]; ok {
m[item.CityID] = append(val, item)
} else {
m[item.CityID] = []MyObject{item, }
}
}
【问题讨论】:
-
Go 没有魔法,你必须使用循环来迭代你的对象,并将它们收集到一个映射(切片)中,映射自
CitiID。 -
如果您分享一些您尝试过的代码 - 这将有助于引导您朝着正确的方向前进。
-
@icza,我目前正在使用您建议的方法。
-
@favoretti,请查看我对该问题的编辑。
-
那么什么不起作用呢?对我来说似乎是一个不错的解决方案:)
标签: arrays dictionary go categories slice