前言
此篇记录go的学习
(一)、工具
1、数组
如下,我们需要A数组获取到B数组相同物料的sto_amount,
arrA
[
map[id:eic1,material_id:a551e66da,material_name:鱿鱼须,amount:22]
map[id:chf2,material_id:5317e73ad,material_name:笋干鸡,amount:30]
map[id:e275,material_id:1c5437e35,material_name:田鸡,amount:45]
]
arrB
[
map[id:rfd9,material_id:a551e66da,material_name:鱿鱼须,sto_amount:10]
map[id:opo2,material_id:5317e73ad,material_name:笋干鸡,sto_amount:20]
map[id:r73d,material_id:1c5437e35,material_name:田鸡,sto_amount:25]
]
一般我们只要循环两个数组匹配相同的 material_id,再赋值就可以了
如果我们只循环一个数组能否解决问题?
首先我需要把arrB构造成keyMap,我们暂时叫做 objB 吧,如下:
objB
[
a551e66da:map[id:rfd9,material_id:a551e66da,material_name:鱿鱼须,sto_amount:10]
5317e73ad:map[id:opo2,material_id:5317e73ad,material_name:笋干鸡,sto_amount:20]
1c5437e35:map[id:r73d,material_id:1c5437e35,material_name:田鸡,sto_amount:25]
]
我们来实现下如何把arrB构造成objB
objB := this.GetKEMapByColumnFromLst("material_id",arrB)
func GetKEMapByColumnFromLst(key string, lst []map[string]interface{}) map[string]map[string]interface{} {
omp := make(map[string]map[string]interface{})
for _, ele := range lst {
tkey := fmt.Sprint(ele[key])
omp[tkey] = ele
}
return omp
}
循环arrA数组,根据material_id,匹配出objB[material_id],对象
objB := this.GetKEMapByColumnFromLst("material_id",arrB)
for _,item :=range arrA{
material_id := fmt.Sprint(item["material_id"])
bInfo := objB[material_id]
item["call_amount"] = bInfo["sto_amount"]
}
到此,arrA数组数据
arrA
[
map[id:eic1,material_id:a551e66da,material_name:鱿鱼须,amount:22,call_amount:10]
map[id:chf2,material_id:5317e73ad,material_name:笋干鸡,amount:30,call_amount:20]
map[id:e275,material_id:1c5437e35,material_name:田鸡,amount:45,call_amount:25]
]
2、map数组构造成string数组
我们通常会遇到这样的问题,在sql中需要 IN('a','b','c')
但大多情况我们得到的数据是map数组[a,b,c],就需要重新构造
那我们就用上节的arrA,对id进行操作
arrA
[
map[id:eic1,material_id:a551e66da,material_name:鱿鱼须,amount:22,call_amount:10]
map[id:chf2,material_id:5317e73ad,material_name:笋干鸡,amount:30,call_amount:20]
map[id:e275,material_id:1c5437e35,material_name:田鸡,amount:45,call_amount:25]
]
假设我们在sql需要用到 id IN('eic1','chf2','e275')
首先需要先把id取出来,先构造成 [eic1,chf2,e275] ,再转成 'eic1','chf2','e275'
ids := this.GetFieldArrayFromLst(arrA,"id") //得到 [eic1,chf2,e275]
func GetFieldArrayFromLst(resultLst []map[string]interface{}, fieldName string) []string {
var rlst []string
rlst = append(rlst, "")
for _, ele := range resultLst {
if nil == ele {
continue
}
id := fmt.Sprint(ele[fieldName])
if "" == id {
continue
}
rlst = append(rlst, id)
}
return rlst
}
idStr := this.GetStrFromArray(ids) //得到 'eic1','chf2','e275'
func GetStrFromArray(rlst []string) string {
restr := `''`
for _, e := range rlst {
restr += S_SFT(`,'{0}'`, e)
}
if strings.HasPrefix(restr, `'',`) {
restr = strings.Replace(restr, `'',`, ``, -1)
}
return restr
}
到此,已经满足我们的需求了
Create by xd on 2019/8/27 18:51:00
Recently revised in 2019/9/6 16:38:04