查找字符串数组中最常见的元素 GO
Posted
技术标签:
【中文标题】查找字符串数组中最常见的元素 GO【英文标题】:Find the most common element in a string array GO 【发布时间】:2022-01-24 02:15:54 【问题描述】:我对 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: %s\n", windEL)
fmt.Printf("Komt %d x voor\n", 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
output
【问题讨论】:
【参考方案1】:winner 始终为 0,您永远不会更新它。然后在增加方向变量(N、O、Z 和 W)后,立即用存储在获胜者中的零值覆盖它们。您需要颠倒分配的顺序。
就像在这个变化中:https://go.dev/play/p/VaJgZcijFdh
另请注意,Go 中的大写变量意味着它们已被导出
【讨论】:
可靠的答案。有点离题,但我还要补充一点,将Windrichting
参数设为切片[]string
而不是数组[7]string
可能是个好主意。除非您期望输入数据列表的长度始终为 7。【参考方案2】:
这是一个替代实现。它使用直方图来收集单词出现的次数。然后它通过直方图逐步找到最常见的单词。没有什么是硬编码的。
https://go.dev/play/p/wTFvNaPRP6B
【讨论】:
有同样的想法,但它不包括 OP 想要的输出荷兰文文本。所以也许这加上一个“枚举”用于从符文转换为荷兰字符串?我相信荷兰文本可能是他使用 switch 而不是这个实现的原因。以上是关于查找字符串数组中最常见的元素 GO的主要内容,如果未能解决你的问题,请参考以下文章