当前位置: 首页 > 面试题库 >

为什么count ++(而不是count = count + 1)会改变Golang中返回地图的方式

顾靖
2023-03-14
问题内容

我使用了一个映射,该映射使用句子中的单词作为键,并使用整数作为值。

func WordCount(s string) map[string]int {
    var m map[string]int
    m = make(map[string]int)
    var substrings[]string
    count := 0
    substrings = strings.Split(s, " ")
    for i := range substrings {
        count = count + 1
        m[substrings[i]] = count
    }

    return m
}

func main() {   
    fmt.Println(WordCount("I am learning GO since some days"))
}

上面的代码 始终 以正确的顺序显示地图,即

map[I:1 am:2 learning:3 GO:4 since:5 some:6 days:7]

但是如果我改变

count = count + 1

count++

输出更改为:

map[learning:3 GO:4 since:5 some:6 days:7 I:1 am:2]

我知道在Golang中地图迭代是随机的,但是为什么count = count + 1总是导致地图迭代以有序方式返回却又相反count++呢?


问题答案:

更改变量值的方式count与映射元素的迭代顺序无关。

没有“正确的”迭代顺序,可以将迭代顺序视为随机的(在当前实现中,它
随机的)。从语言规范中引用:对于语句:

未指定地图的迭代顺序,并且不能保证每次迭代之间都相同。

Go Tour使用Go
Playground
提供代码编辑器和运行器。Go
Playground会缓存您在其上运行的代码的输出。运行两次完全相同的代码只会向您显示缓存的输出。

但是,如果您更改代码,则将其“视为”新代码,并将对其进行编译和运行(其输出将在之后进行缓存)。并且由于它是新运行的,因此您可能会观察到一个新的随机顺序-
您正在执行。

如果您再次更改了代码中的某些内容,即使添加或更改了一些注释也没什么大不了,那么输出(可能)将再次更改,请尝试一下。

有关如何实现Playground的更多信息,请参阅博客文章 Inside Go
Playground

引用相关部分:

当前端收到编译请求时,它首先检查memcache,以查看它是否已缓存该源的先前编译结果。
如果找到,它将返回缓存的响应。
缓存可防止热门程序(例如Go主页上的程序)使后端过载。如果没有缓存的响应,则前端向后端发出RPC请求,将响应存储在内存缓存中,解析回放事件,然后将JSON对象作为HTTP响应返回给客户端(如上所述)。

另请注意,从Go
1.12开始,使用fmt包打印地图时会对其进行排序(以简化测试),因此,现在打印相同的地图将始终以相同的顺序列出元素。迭代顺序仍然有意保持不确定性。



 类似资料:
  • 问题内容: 相关(SQL Server): Count(*)vs Count(1) 您能告诉我什么是性能更好的(MySQL)吗?Count(*)还是count(1)? 问题答案: 这是MySQL的答案。 它们的性能完全相同-除非您使用MyISAM,否则存在特例。无论如何我总是用。 http://dev.mysql.com/doc/refman/5.1/en/group-by- functions.

  • 问题内容: 和,mysql有什么区别。 问题答案: 计算结果集中的所有行(如果使用GROUP BY,则为组)。 只计算不为空的那些行。即使没有NULL值,在某些情况下这也会变慢,因为必须检查该值(除非该列不可为空)。 与1 相同,因为1永远不能为NULL。 要查看结果的差异,您可以尝试以下小实验: 结果:

  • 本文向大家介绍count(*),count(1)和count(列名)的区别?相关面试题,主要包含被问及count(*),count(1)和count(列名)的区别?时的应答技巧和注意事项,需要的朋友参考一下 count(*),count(1)在统计的时候不会忽略Null,count(列名)在统计的时候会忽略Null。若列名为主键,count(列名)会比count(1),count(*)快,反之则c

  • 问题内容: 我试图计算表中的行数,并认为这是执行此操作的正确方法: 但是计数总是返回。如果我在phpMyAdmin中使用相同的查询,则会得到正确的结果。它位于表格中,因此我也尝试进行测试,但是返回了。 什么是正确的方法? 问题答案: 您必须获取一条记录,它将包含Count()的结果

  • 问题内容: 只是想知道您是否有人用光了,性能是否存在明显差异,或者这仅仅是过去的日子所养成的传统习惯? 具体的数据库是。 问题答案: 没有区别。 原因: 在线书籍上说“ ” “ 1”是非空表达式:因此与相同。优化器可以识别它是什么:琐碎的。 与或相同 例子: 相同的IO,相同的计划,作品 编辑,2011年8月 关于DBA.SE的类似问题。 编辑,2011年12月 在ANSI-92中专门提到(请查找

  • 本文向大家介绍Select count(*)、Count(1)和Count(列)的区别及执行方式,包括了Select count(*)、Count(1)和Count(列)的区别及执行方式的使用技巧和注意事项,需要的朋友参考一下     在SQL Server中Count(*)或者Count(1)或者Count([列])或许是最常用的聚合函数。很多人其实对这三者之间是区分不清的。本文会阐述这三者的作