查找字符串数组GO中最常见的元素



我是golang的新手,我很难在数组中找到最常见的字符串(Windrichting(。它应该是N,但我的输出给了我W(它总是给我最后一个字符串,所以Windrichting[6]。有人能帮忙吗?

这是我的代码:

包装主

import "fmt"
func main() {
Windrichting := [7]string{"N", "N", "N", "N", "O", "Z", "W"}
windEL, winner := Mostcommon(Windrichting)
fmt.Printf("Mostcommon windrichting: %sn", windEL)
fmt.Printf("Komt %d x voorn", winner)
}

func Mostcommon(Windrichting [7]string) (windEL string, winner int) {
var N int
var O int
var Z int
var W int
Windrichtingbase := [4]string{"N", "O", "Z", "W"}
for _, v := range Windrichting {
switch v {
case Windrichtingbase[0]:
N++
if N > winner {
N = winner
windEL = "Noord"
}
case Windrichtingbase[1]:
O++
if O > winner {
O = winner
windEL = "Oost"
}
case Windrichtingbase[2]:
Z++
if Z > winner {
Z = winner
windEL = "Zuid"
}
case Windrichtingbase[3]:
W++
if W > winner {
W = winner
windEL = "West"
}
}
}
return windEL, winner
}

输出

winner始终为0,您永远不会更新它。然后,在递增方向变量(N、O、Z和W(后,您会立即用winner中存储的零值覆盖它们。你需要颠倒作业的顺序。

就像这次变化一样:https://go.dev/play/p/VaJgZcijFdh

还要注意,Go中大写的变量意味着它们被导出

这里有一个替代实现。它使用直方图来收集单词出现的次数。然后,它逐步通过直方图来找到最常见的单词。没有什么是硬编码的。

https://go.dev/play/p/wTFvNaPRP6B

最新更新