【发布时间】:2015-02-17 12:51:26
【问题描述】:
在浏览 contains 方法时,我遇到了以下问答
在这个问答中一再提到该方法实现起来真的很简单。我不明白的是,如果它很容易实现,并且看到 DRY 是一种流行的软件原理 && 以及大多数现代语言都实现了上述方法,那么在排除这种简单方法的背后可能涉及什么样的设计推理?
【问题讨论】:
标签: go
在浏览 contains 方法时,我遇到了以下问答
在这个问答中一再提到该方法实现起来真的很简单。我不明白的是,如果它很容易实现,并且看到 DRY 是一种流行的软件原理 && 以及大多数现代语言都实现了上述方法,那么在排除这种简单方法的背后可能涉及什么样的设计推理?
【问题讨论】:
标签: go
实现的琐碎程度取决于实现的范围。 当你知道如何比较每个值时,实现它是微不足道的。应用程序代码通常知道如何比较该应用程序中使用的类型。但在一般情况下实现任意类型并非易事,语言和标准库就是这种情况。
【讨论】:
判断一个切片是否包含某个对象是一个 O(n) 操作,其中 n 是切片的长度。如果语言提供了执行此操作的功能,这不会改变。如果您的代码依赖于频繁检查切片是否包含某个值,您应该重新评估您对数据结构的选择;在这种情况下,地图通常会更好。为什么标准库应该包含鼓励您为您的任务使用错误数据结构的函数?
【讨论】:
in 运算符是做什么的,因为我不会说 Python。我相信这不是不合适的;如果它是可重载的——就像所有 (?) Python 运算符一样,拥有它听起来是个好主意。如果您需要经常在切片上使用它,您应该重新评估您的数据结构。
n 无关紧要,您只需检查一个元素是否是您想要跳过循环的 3 个元素之一。