Golang Go语言中,如何实现这样的嵌套循环?
请问在数据库里面查询出来的列表,如何循环出这样的分组结构呢?
"manage": {
"ent": {
"export": true,
"get": true,
"plan": true
}
},
"oa": {
"user": {
"add": true,
"addDept": true,
"addUser": true,
"get": true,
"plan": true
}
}
用 php 可以通过循环,这样拼接,但是用 go 就玩不好了
$newList[$v['name']][$v1['name']][$v2['name']] = true
感谢!
Golang Go语言中,如何实现这样的嵌套循环?
更多关于Golang Go语言中,如何实现这样的嵌套循环?的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
OP 表述能力堪忧……你这代码既看不出来有什么分组也看不出来有什么循环。
更多关于Golang Go语言中,如何实现这样的嵌套循环?的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
不知道你想说啥,不过下面的赋值用 map 不是就可以做到吗?
抱歉啊,我确实没表述清楚,现在我又补了一点信息
额,多谢啊。请问能帮忙解决一下我的问题吗?
相对复杂的结构不是特别适合用 map 来解析吧,实现定义好要解析的 json 相对应的 struct ,然后直接用 json 包的 Unmarshal 就可以了,类似这样:
text := [你要解析的数据]
type entry struct {
Id int json:"id"
Name string json:"name"
ParentId int json:"parent_id"
Children []entry json:"children"
}
e := entry{}
json.Unmarshal([]byte(text), &e)
emmm ,才注册不久,评论不能用 markdown ,tab 缩进也会被吃掉么…
代码片段 OP 凑合看看吧
定义一个 children struct ,然后使用 children 数组
我想实现的是最上面的那个结构
"manage": {
“ent”: {
“export”: true,
“get”: true,
“plan”: true
}
},
php 不太懂。。
go 的话,我觉得是一样的道理啊,把要解析的字段都定义到 struct 里,然后直接解析
试了好久,就是不行,能帮忙研究一下嘛,多谢拉
看起来就是一个链表
这是树状结构吧……什么奇葩设计。你是想把树状拍平么?
哈哈,crud ,集合操作,大道至简在这儿就不太管用了。
是的,就是打算把树状拍平,有咩有办法啊? 大佬
都树状了,那就递归啊……另外我不知道你的 json 数据是谁,怎么提供的,要我就喷死设计这个接口的人。
是啊,我现在就是递归,问题是,水平有限,递归不到拍平的样子 o(╥﹏╥)o
首先,按照 给出的结构反序列化。go<br>func flatten(ent *entry) []*entry {<br> entries := make([]*entry, 0)<br> entries = append(entries, ent)<br> if len(ent.children) > 0 {<br> entries = append(entries, flatten(ent.children)...)<br> }<br> return entries<br>}<br>
建议补一下数据结构……
go<br>func flatten(ent *entry) []*entry {<br>entries := make([]*entry, 0)<br>entries = append(entries, ent)<br>for child := range ent.children {<br>entries = append(entries, flatten(child)...)<br>}<br>return entries<br>}<br>
草,v2ex 的 markdown 机制好迷。
定义一个结构
struct Child{
Id int json:"id"
Name string json:"name"
ParentId int json:"parent_id"
Children json.RawMessage json:"children"
}
把结果发序列化之后,把 child.Children 字段继续递归反序列化,最后存到一个数组就行了
可能理解错了吧,我是要拍平成类似链表的感觉
树状怎么可能变成链表。
o(╥﹏╥)o ,好吧,看来我只能换个思路了,哎,多谢了
完全没看明白想干啥,如果是想动态解析 json 文件,然后取得里面一些值的话,试试 gjson
https://github.com/tidwall/gjson
你写的是 list 转 map
然后你问 map 压平怎么压
你真的搞清楚你想问什么了????
这个看不懂的话就没人能帮你了
https://go.dev/play/p/oje5ib9Pu-n
List 的 key index 拼接处理成 map 的 key?
用 go 把 json 发送给 php 处理完了在返回 json🤣🤣🤣
能给个输入+对应的输出吗?
给了 2 个例子, 一个没输入, 一个没期望输出.
要操作树, 你肯定要会 bfs 和 dfs, 这 2 个不理解, 代码肯定不会写.
用这个 https://github.com/tidwall/gjson, 你的意思应该是根据 keypath 获取 value 吧go<br>package main<br><br>import "<a target="_blank" href="http://github.com/tidwall/gjson" rel="nofollow noopener">github.com/tidwall/gjson</a>"<br><br>const json = `{"name":{"first":"Janet","last":"Prichard"},"age":47}`<br><br>func main() {<br> value := gjson.Get(json, "name.last")<br> println(value.String())<br>}<br>
不是想解析 json ,我贴 json ,是为了给看结构
不是啊,其实我就是要把 sql 查出来的 List ,里面 的 key index 拼接处理成 map 的 key
你好像不知道你贴的所有 json 都不叫「一个列表」
巨婴伸手党,等着别人喂
抱歉啊,这几天太忙了,昨天有比较急的事,搞到很晚,目标结构就是我最后一次贴的 json ,其实我现在已经换了一种方法实现了,也就是最后一次贴的代码,只是实现的比较蹩脚,我用 go 输出的树结构,然后我用 vue 拿到数据后,通过 js 的写法实现的!
额,我要的不是一个数组,是最后一次我贴的 json ,非常感谢
类似吧
我现在就是给树结构到 vue ,然后用 js 处理使用,蹩脚啊!
抱歉抱歉,你写的代码我跑了的,还有上面那个老哥的也是,非常感谢能上心我的问题
表结构,就是第二个 json ,那个实际上是我已经从库里面查询出来生成的树,
表就是以 parent_id,id ,这个父子关系来存数据的,要输出的,就是我最后一次贴的 json
另外多谢提醒,我也是刚上手,go ,哎,抱歉抱歉,添麻烦了!
通透,能传授点经验吗,大佬
切莫侮辱人格,人都有难处的时候! 换位思考、换位思考,不奢望你大神能解我的难,但还希望你能管住自己的手,🙏🏻
在Golang(Go语言)中,实现嵌套循环非常直接且直观,你可以使用for
循环来嵌套另一个for
循环。下面是一个简单的示例,演示如何实现嵌套循环:
package main
import "fmt"
func main() {
// 外层循环:遍历0到2
for i := 0; i < 3; i++ {
// 内层循环:遍历0到4
for j := 0; j < 5; j++ {
// 打印当前i和j的值
fmt.Printf("i = %d, j = %d\n", i, j)
}
// 可以在外层循环的末尾添加一些逻辑,比如打印一个换行符
fmt.Println("---")
}
}
在这个示例中,外层循环变量i
从0开始,小于3时继续循环;内层循环变量j
从0开始,小于5时继续循环。每次内层循环完成后,外层循环会继续下一次迭代。这样可以实现任意深度的嵌套循环,只需根据需要在适当的位置添加更多的for
循环即可。
嵌套循环常用于处理多维数组或矩阵,或者在需要同时遍历多个集合时。注意,在使用嵌套循环时,要确保循环的终止条件合理,以避免产生无限循环,影响程序的性能和稳定性。
希望这个解释能帮助你理解如何在Go语言中实现嵌套循环。如果你有更具体的问题或场景,请随时提问!