【问题标题】:go-lang: lack of contains method design-justification [closed]golang:缺乏包含方法设计理由[关闭]
【发布时间】:2015-02-17 12:51:26
【问题描述】:

在浏览 contains 方法时,我遇到了以下问答

contains-method-for-a-slice

在这个问答中一再提到该方法实现起来真的很简单。我不明白的是,如果它很容易实现,并且看到 DRY 是一种流行的软件原理 && 以及大多数现代语言都实现了上述方法,那么在排除这种简单方法的背后可能涉及什么样的设计推理?

【问题讨论】:

    标签: go


    【解决方案1】:

    实现的琐碎程度取决于实现的范围。 当你知道如何比较每个值时,实现它是微不足道的。应用程序代码通常知道如何比较该应用程序中使用的类型。但在一般情况下实现任意类型并非易事,语言和标准库就是这种情况。

    【讨论】:

    【解决方案2】:

    判断一个切片是否包含某个对象是一个 O(n) 操作,其中 n 是切片的长度。如果语言提供了执行此操作的功能,这不会改变。如果您的代码依赖于频繁检查切片是否包含某个值,您应该重新评估您对数据结构的选择;在这种情况下,地图通常会更好。为什么标准库应该包含鼓励您为您的任务使用错误数据结构的函数?

    【讨论】:

    • go 的主要目标之一是促进使用peopper 软件原则。不确定是否允许我使用我认为方便的另一种语言的功能,但鉴于您所说,Python 的“in”运算符是错误使用的推动者吗?
    • 我不确定 Python 的 in 运算符是做什么的,因为我不会说 Python。我相信这不是不合适的;如果它是可重载的——就像所有 (?) Python 运算符一样,拥有它听起来是个好主意。如果您需要经常在切片上使用它,您应该重新评估您的数据结构。
    • 时间复杂度并不总是如此。 n 无关紧要,您只需检查一个元素是否是您想要跳过循环的 3 个元素之一。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-31
    • 1970-01-01
    • 2015-10-18
    • 2013-09-13
    • 2013-03-29
    • 2014-01-31
    • 1970-01-01
    相关资源
    最近更新 更多