将结构中的字符串转换为 [] 字符串
Convert string in struct to []string
我有一个 struct
如下:
type TourData struct {
ArtistID int //artist ID
RelationID string //key for relations
City string
Country string
TourDates []string
}
type MyRelation struct {
ID int `json:"id"`
DatesLocations map[string][]string `json:"datesLocations"`
}
其中包含来自 csv 文件的数据:
1,nagoya-japan,Nagoya,Japan,
1,penrose-new_zealand,Penrose,New_Zealand,
1,dunedin-new_zealand,Dunedin,New_Zealand,
2,playa_del_carmen-mexico,Playa Del Carmen,Mexico,
2,papeete-french_polynesia,Papeete,French_Polynesia,
MyRelations 由 API 填充,其中包含:
"index": [
{
"id": 1,
"datesLocations": {
"dunedin-new_zealand": [
"10-02-2020"
],
"nagoya-japan": [
"30-01-2019"
],
"penrose-new_zealand": [
"07-02-2020"
]
}
},
{
"id": 2,
"datesLocations": {
"papeete-french_polynesia": [
"16-11-2019"
],
"playa_del_carmen-mexico": [
"05-12-2019",
"06-12-2019",
"07-12-2019",
"08-12-2019",
"09-12-2019"
]
}
}
日期来自另一个结构。我用来填充这个结构的代码如下:
var oneRecord TourData
var allRecords []TourData
for _, each := range csvData {
oneRecord.ArtistID, _ = strconv.Atoi(each[0])
oneRecord.RelationID = each[1]
oneRecord.City = each[2]
oneRecord.Country = each[3]
oneRecord.TourDates = Relations.Index[oneRecord.ArtistID-1].DatesLocations[each[1]]
allRecords = append(allRecords, oneRecord)
}
jsondata, err := json.Marshal(allRecords) // convert to JSON
json.Unmarshal(jsondata, &TourThings)
我需要将所有 1 组合在一起,然后将 2 等组合在一起。我想创建另一个结构,并从这个结构填充,但运气不佳 - 有什么想法吗?
澄清一下,我想说 TourData.City 等于:
[Nagoya,Penrose,Dunedin]
[Playa Del Carmen, Papeete]
目前,如果我要打印 TourData[0].City,我会得到 Nagoya。
我尝试创建另一个结构,以使用以下字段从 TourData 结构填充:
type TourDataArrays struct {
ArtistID int
City []string
Country []string
TourDates [][]string
}
然后使用以下代码填充结构:
var tourRecord TourDataArrays
var tourRecords []TourDataArrays
for i := 0; i < len(Relations.Index); i++ {
for j := 0; j < len(allRecords); j++ {
if allRecords[i].ArtistID == i+1 {
tourRecord.City = append(tourRecord.City, allRecords[j].City)
}
}
tourRecords = append(tourRecords, tourRecord)
}
然而,这是将所有城市添加到一个数组中,即
[名古屋、彭罗斯、但尼丁、普拉亚德尔卡曼、帕皮提]。
如果我正确理解了您的要求,您还需要将 city 声明为字符串数组。 (以及相应的国家/地区)。
查看此解决方案:https://go.dev/play/p/osgkbfWV3c5
请注意,我没有从 Json.
中的一个字段中删除国家/地区以及派生城市和国家/地区的重复数据
我有一个 struct
如下:
type TourData struct {
ArtistID int //artist ID
RelationID string //key for relations
City string
Country string
TourDates []string
}
type MyRelation struct {
ID int `json:"id"`
DatesLocations map[string][]string `json:"datesLocations"`
}
其中包含来自 csv 文件的数据:
1,nagoya-japan,Nagoya,Japan,
1,penrose-new_zealand,Penrose,New_Zealand,
1,dunedin-new_zealand,Dunedin,New_Zealand,
2,playa_del_carmen-mexico,Playa Del Carmen,Mexico,
2,papeete-french_polynesia,Papeete,French_Polynesia,
MyRelations 由 API 填充,其中包含:
"index": [
{
"id": 1,
"datesLocations": {
"dunedin-new_zealand": [
"10-02-2020"
],
"nagoya-japan": [
"30-01-2019"
],
"penrose-new_zealand": [
"07-02-2020"
]
}
},
{
"id": 2,
"datesLocations": {
"papeete-french_polynesia": [
"16-11-2019"
],
"playa_del_carmen-mexico": [
"05-12-2019",
"06-12-2019",
"07-12-2019",
"08-12-2019",
"09-12-2019"
]
}
}
日期来自另一个结构。我用来填充这个结构的代码如下:
var oneRecord TourData
var allRecords []TourData
for _, each := range csvData {
oneRecord.ArtistID, _ = strconv.Atoi(each[0])
oneRecord.RelationID = each[1]
oneRecord.City = each[2]
oneRecord.Country = each[3]
oneRecord.TourDates = Relations.Index[oneRecord.ArtistID-1].DatesLocations[each[1]]
allRecords = append(allRecords, oneRecord)
}
jsondata, err := json.Marshal(allRecords) // convert to JSON
json.Unmarshal(jsondata, &TourThings)
我需要将所有 1 组合在一起,然后将 2 等组合在一起。我想创建另一个结构,并从这个结构填充,但运气不佳 - 有什么想法吗?
澄清一下,我想说 TourData.City 等于:
[Nagoya,Penrose,Dunedin]
[Playa Del Carmen, Papeete]
目前,如果我要打印 TourData[0].City,我会得到 Nagoya。
我尝试创建另一个结构,以使用以下字段从 TourData 结构填充:
type TourDataArrays struct {
ArtistID int
City []string
Country []string
TourDates [][]string
}
然后使用以下代码填充结构:
var tourRecord TourDataArrays
var tourRecords []TourDataArrays
for i := 0; i < len(Relations.Index); i++ {
for j := 0; j < len(allRecords); j++ {
if allRecords[i].ArtistID == i+1 {
tourRecord.City = append(tourRecord.City, allRecords[j].City)
}
}
tourRecords = append(tourRecords, tourRecord)
}
然而,这是将所有城市添加到一个数组中,即
[名古屋、彭罗斯、但尼丁、普拉亚德尔卡曼、帕皮提]。
如果我正确理解了您的要求,您还需要将 city 声明为字符串数组。 (以及相应的国家/地区)。
查看此解决方案:https://go.dev/play/p/osgkbfWV3c5
请注意,我没有从 Json.
中的一个字段中删除国家/地区以及派生城市和国家/地区的重复数据