查找字符串数组中最常见的元素 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的主要内容,如果未能解决你的问题,请参考以下文章

python 获取数组中最常见的元素。

Java中数组的使用

在SQLAlchemy中查找数组列中最常见的值

golang基础之数组

简单整理常见对数组字符串操作的封装

Go数组字符串与切片