Go 语言入门:基础语法 | 青训营

44 阅读2分钟

一个例子引发的思考

`

func getUserId(userids []string) map[string]int { 
counts := make(map[string]int) 
for _, userid := range userids 
{ count := counts[userid] count++ counts[userid] = count } 
return counts }`

这个函数叫做 getUserId,它的目的是计算输入切片(slice)userids 中每个用户ID出现的次数,并将结果作为一个 map 返回。

我们逐步解析这个函数:

  1. 输入参数:

    • userids []string: 这是一个字符串的切片,每个字符串代表一个用户ID。
  2. 初始化一个空的 map:

    counts := make(map[string]int)
    

    这里我们创建了一个名为 counts 的 map,它的键是字符串(即用户ID),而值是整数(表示该用户ID出现的次数)。

  3. 遍历 userids 切片:

    for _, userid := range userids {
    

    我们使用 rangeuserids 切片进行迭代,每次迭代将用户ID赋值给 userid

  4. 计算每个用户ID的出现次数:

    count := counts[userid]
    count++
    counts[userid] = count
    
    • count := counts[userid]: 获取当前用户ID的计数。如果该用户ID尚未存在于 map 中,该值将为 0。
    • count++: 增加该用户ID的计数。
    • counts[userid] = count: 更新 map 中该用户ID的计数。
  5. 返回计数:

    return counts
    

    最后,函数返回 counts map,该 map 包含每个用户ID及其出现的次数。

这个函数用于统计 userids 切片中每个用户ID的出现次数,并以 map 的形式返回。

手操运行

假设我们有以下用户ID切片:

userids := []string{"Alice", "Bob", "Alice", "Charlie", "Bob", "Alice", "David", "David"}

这个切片中有些用户ID出现了不止一次。我们想知道每个用户ID分别出现了多少次。

调用函数:

result := getUserId(userids)

函数的运行过程:

  1. 初始化一个空的 counts map。
  2. 遍历切片中的第一个用户ID "Alice",看 map 中是否有 "Alice"。没有,所以 "Alice" 的计数是 0。
  3. 增加 "Alice" 的计数(0 + 1 = 1),然后在 map 中存储 "Alice":1。
  4. 接着遍历 "Bob"。用同样的方法处理。所以最后 map 中有 "Bob":1。
  5. 再次遇到 "Alice",现在 map 中 "Alice" 的计数是 1。所以再增加一次,变为 2。
  6. ... 继续这个过程,直到遍历完整个切片。

当函数执行完毕后,result 的值将是:

{
    "Alice": 3,
    "Bob": 2,
    "Charlie": 1,
    "David": 2
}

所以,通过这个函数,我们知道在给定的 userids 切片中,Alice 出现了3次,Bob 出现了2次,Charlie 出现了1次,而 David 出现了2次。