Golang中如何将两个切片/数组添加到一个map变量中
Golang中如何将两个切片/数组添加到一个map变量中
var name_age map[string]int
name := []string{"david", "avid", "stitches", "killeta", "sskrill"}
age := []int{20, 30, 18, 40, 34}
如何将切片 name 和 age 插入到 name_age 映射中?
我尝试过:
for _, i := range names {
for _, x := range x {
name_age = map[string]int{i: x}
}
}
也尝试过:
for i := 0; i < len(name); i++ {
for x := 0; x < len(age); x++ {
mn = map[string]int{name[i]: age[x]}
}
}
两个循环的输出都是 map[sskrill:34]。
当我使用:
var name_age_x = make(map[string]int)
for i := 0; i < len(name); i++ {
for x := 0; x < len(age); x++ {
name_age_x[name[i]] = age[x]
}
}
输出是 map[avid:34 david:34 killeta:34 sskrill:34 stitches:34] //// 年龄 34 在所有名字中重复出现…… /// 即使我使用 range 循环,结果也是一样的。
如何让它正常工作?
注意:项目的顺序不应被改变/排序,以便年龄与名字匹配。
更多关于Golang中如何将两个切片/数组添加到一个map变量中的实战教程也可以访问 https://www.itying.com/category-94-b0.html
那么这段代码有什么问题呢?
非常感谢。我在这件事上挣扎了超过三个小时。
如果你学会使用单步调试器,那么大约三秒钟内,你就会痛苦地明白你的代码为什么错了、它在做什么以及如何修复它。
了解你的工具是工作中最重要的一部分。步进调试器是最好的调试方式,它们能展示所有事物的状态,你可以像看“慢动作”一样,一步一步地观察事物如何变化。
请实际操作一下,
var name_age map[string]int
name := []string{"david", "avid", "stitches", "killeta", "sskrill"}
age := []int{20, 30, 18, 40, 34}
这是两个切片,它们的长度是相同的。
假设两个切片长度相同,你可以遍历其中一个切片,并使用索引来同时访问两个切片。
name_age := make(map[string]int)
for idx := range names {
name_age[name[idx]] = age[idx]
}
运行符合预期。谢谢。
能否调整顺序,让所有较长的块排在前面,较短的块排在后面,就像这样:
https://play.golang.org/p/iwXl2n-gIob
如果能有一种更简单、更易读、更易理解的切片分块方法,将不胜感激。
petrus:
items[m:]是一个简单的切片表达式。items变量代表未分配的项目。一旦我们分配了m个项目,就更新items。这会更新len(items)的值。
谢谢……现在这让我完全理解了……我一直在想声明 items = items[m:] 的目的是什么。现在我明白了,它是用来更新 len(items) 的值的。
谢谢。我之前完全不知道有单步调试器。我是自学编程的,所以对周围事物的运作方式没有指导。
从 Java 开始,但当我接触到数据库的 CRUD 操作时就放弃了。在网上研究了其他编程语言,尝试了几种,然后爱上了 Golang,因为它简单、数据库连接和设置容易,并且它某种程度上具有面向对象的特性。尽管接收器和 & 符号是新的,并且有点复杂,需要习惯。
类似这样吗?使用 @NobbZ 的代码:
name := []string{"david", "avid", "stitches", "killeta", "sskrill"}
age := []int{20, 30, 18, 40, 34}
name_age := make(map[string]int)
for idx := range name {
name_age[name[idx]] = age[idx]
}
fmt.Println(name_age)
非常感谢……真希望你能加上注释,这样我就能理解到底是怎么回事了。我一直对数组和切片相关的东西感到畏惧。
我猜我的脑子就是没法理解它们的工作原理,但假以时日,我最终会明白的。
感谢你的回答,如果你能引导我理解数组的工作原理,以及它们在所有语言中是否都以相同的方式工作,我将不胜感激。
func chunker(items []string, n int) [][]string {
chunks := make([][]string, n)
for i := 0; i < len(chunks); i++ {
m := (len(items) + (n - 1)) / n
chunks[i] = items[:m]
items = items[m:]
n--
}
return chunks
}
这看起来更有趣,因为它内部没有 if 条件。
感谢各位提供的解决方案和帮助,我真的从你们那里学到了很多。 现在我想在HTML页面中插入这些数据块,但无法正常工作。 我已经在这里发布了这个问题。
如何在Golang HTML模板中对切片块进行范围遍历 我需要帮助在HTML页面中对数组和切片进行范围遍历。当我尝试遍历数组和块时,它们没有显示在HTML页面中,但标题部分被传递到了HTML页面。 如果这是一个新手问题,请见谅。非常感谢您的帮助。
package main import ( "fmt" "html/template" "log" "math/rand" "net/http" "strconv" "time" //entities "deadmeat.pro/chunker/src/entities" //helpers "deadmeat.pr…
你需要确保两个切片按相同索引对应。使用单个循环,通过索引同时访问两个切片:
package main
import "fmt"
func main() {
name_age := make(map[string]int)
name := []string{"david", "avid", "stitches", "killeta", "sskrill"}
age := []int{20, 30, 18, 40, 34}
// 检查长度是否匹配
if len(name) != len(age) {
panic("切片长度不匹配")
}
// 使用单个循环按索引添加
for i := 0; i < len(name); i++ {
name_age[name[i]] = age[i]
}
fmt.Println(name_age)
// 输出: map[avid:30 david:20 killeta:40 sskrill:34 stitches:18]
}
或者使用range循环:
for i, n := range name {
name_age[n] = age[i]
}
你之前代码的问题在于使用了嵌套循环,这会导致每个名字都与所有年龄配对,最终只保留最后一次赋值(34)。

