Go每日一题(105) 的题目如下

4155 次点击 · 3 赞 ·大约8小时之前 开始浏览   · 来源「Golang来啦」

下面代码里的 counter 的输出值?

func main() {
	var m = map[string]int{
		"A": 21,
		"B": 22,
		"C": 23,
	}
	counter := 0
	for k, v := range m {
		if counter == 0 {
			delete(m, "A")
		}
		counter++
		fmt.Println(k, v)
	}
	fmt.Println("counter is ", counter)
}
  • A. 2
  • B. 3
  • C. 2 或 3
4155 阅读
39 回复
feiyang
feiyang · #1 · 3年之前

打卡

Dessert
Dessert · #2 · 3年之前

map引用传递

henry1
henry1 · #3 · 3年之前

ok

AntonyZhang
AntonyZhang · #4 · 3年之前

map 是在哈希散列表,当使用 for range 时是无序的

feiyang
feiyang · #5 · 3年之前

for range map 是无序的

NovaChaos
NovaChaos · #6 · 3年之前

mk

Zuos
Zuos · #7 · 3年之前

mark

hasbug
hasbug · #8 · 3年之前

mark

QRQRQRqrqr
QRQRQRqrqr · #9 · 3年之前

func main() { var m = map[string]int{ "A": 21, "B": 22, "C": 23, } counter := 0 for k, v := range m { if counter == 0 { delete(m, "A") } counter++ fmt.Println(k, v) } fmt.Println("counter is ", counter) }

for range map 是无序的,如果第一次循环到 A,则输出 3;否则输出 2。

jatshw
jatshw · #10 · 3年之前

mark

dingweihua
dingweihua · #11 · 3年之前

for range map是无序的

Dessert
Dessert · #12 · 3年之前
DessertDessert #2 回复

map引用传递

jan-bar
jan-bar · #13 · 3年之前
DessertDessert #12 回复

#2楼 @Dessert range map 未指定遍历次数 https://cloud.tencent.com/developer/article/1876243

硬核解答,点赞。

summers
summers · #14 · 3年之前
DessertDessert #12 回复

#2楼 @Dessert range map 未指定遍历次数 https://cloud.tencent.com/developer/article/1876243

多谢老板

hypersus
hypersus · #15 · 3年之前

for range遍历切片时,循环次数是确定的,因此在循环体内改变切片结构对循环结果不影响;而for range遍历map时,循环次数是不确定的,循环体内对map的修改会在结果上反映出来

zyicy
zyicy · #16 · 3年之前

mark

k53247l
k53247l · #17 · 2年之前

mark

feiyang
feiyang · #18 · 2年之前

for range map 是无序的,如果第一次循环到 A,则输出 3;否则输出 2。

新年快乐

Dessert
Dessert · #19 · 2年之前
DessertDessert #12 回复

#2楼 @Dessert range map 未指定遍历次数 https://cloud.tencent.com/developer/article/1876243

  • for range map是无序的
Dessert
Dessert · #20 · 2年之前
DessertDessert #19 回复

#12楼 @Dessert + for range map是无序的

slice、map都引用传递

jatshw
jatshw · #21 · 2年之前

mark

RobertWang
RobertWang · #22 · 2年之前

Mark


我每天收集整理的每日一练 https://github.com/RobertWang/golang_study

欢迎大家来补充

huangyf168
huangyf168 · #23 · 2年之前

Mark

YuPeng
YuPeng · #24 · 2年之前

打卡

flyZ
flyZ · #25 · 2年之前

mark

hasbug
hasbug · #26 · 2年之前

mark

feiyang
feiyang · #27 · 2年之前

for range map 是无序的, slice、map都引用传递

yayaleslie
yayaleslie · #28 · 2年之前

mark

cainiaoyige01
cainiaoyige01 · #29 · 2年之前

因为map是无序的,所以在range遍历中不知道A是第一个出现往后才出现了!关键点是map的底层原理桶是指针类型的 删除的情况不发生扩容原map是跟着变化的

euibieur894
euibieur894 · #30 · 2年之前

打卡

xixihehe
xixihehe · #31 · 大约1年之前

应该是三个全部都会输出 分析:在使用 delete(m, "A") 删除的时候并没用跳出循环,在当前循环是 k,v 是已经存在的, map本身是无序的,但是 for range根据循环对象本身的序列顺序进行遍历 所以第一次输出的一定是A

YuPeng
YuPeng · #32 · 大约1年之前

mark

Qmfuser
Qmfuser · #33 · 大约1年之前

mark

brothersam
brothersam · #34 · 大约1年之前

C. 2 或 3

1174en
1174en · #35 · 大约1年之前

m

528548004
528548004 · #36 · 大约1年之前

mark:map引用传递,同时无序,所以二或三

420303865
420303865 · #37 · 9月之前

mark

BigBigGopher
BigBigGopher · #38 · 9月之前

mark

YuPeng
YuPeng · #39 · 大约1个月之前

1

添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传