【问题标题】:Find the most common element in a string array GO查找字符串数组中最常见的元素 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

【问题讨论】:

    标签: go


    【解决方案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 而不是这个实现的原因。
    猜你喜欢
    • 2011-02-03
    • 2023-04-03
    • 2015-11-29
    • 1970-01-01
    • 1970-01-01
    • 2019-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多