2

当我使用哈希表/字典时,我有时会为如何指定键而苦恼。

例如:如果我创建一个简单的字典(本示例使用 Python),

foo = {'bar': 'baz', 'foobar': 'foobaz' }

我可以使用键值访问值(在其他模块中): ( foo['bar']) 并baz返回。

用邪恶博士的话来说,“非常标准,真的。”

不幸的是,使用静态字符串作为键将使用此 Dictionary 的任何模块与其实现紧密耦合。当然,这也适用于使用其他键类型(例如 Enums、Objects 等)时;无论如何,您将其切片,所有访问 Dictionary 的模块都需要知道键的值。

为了解决这个问题,我通常使用静态常量字符串值(或 Enums,如果在语言中可用)作为键,并将它们公开存储在本地类/模块中,或者存储在单独的模块/类中。因此,对字典键本身的任何更改都保存在一个位置。

这通常看起来像这样:

BAR_KEY = 'bar'
foo[BAR_KEY] = 'foobar'

是否有更好的方法来指定键,这样 Dictionary 的使用不一定将模块/类与其实现耦合?

注意:我在 SO 中看到了一些解决此问题的响应(例如property-to-reference-a-key-value-pair-in-a-dictionary),但这些主题似乎并没有专门解决这个问题。答案很有帮助,但我想要更广泛的经验。

4

5 回答 5

2

为什么不为此创建一个只包含属性的类?这可以用 Python 很好地完成(据我所知),并且也可以很好地与其他语言一起使用。使用当今的工具重构名称也很简单。

于 2009-03-18T02:26:03.177 回答
2

在我传递对象并且我有已知键的情况下,我总是更喜欢向对象添加属性。IMO,字典的用例是当您不知道键是什么时。

Python 很简单:

foo.bar=baz

Java is pretty much the same:

class Foo { public String bar="baz"; }

The Python performance would be pretty much identical, since a property lookup is just a dictionary lookup and the Java performance would be better.

于 2009-03-18T02:32:13.443 回答
1

我有时会创建一个单独的类来保存字典键。这为他们提供了自己的命名空间,以及将键放在 const 字符串中的常规好处,即您没有拼写错误的风险,您可以完成代码,并且字符串值很容易更改。如果您不想创建一个单独的类,您将获得除命名空间之外的所有好处,只是从拥有 const 字符串。

也就是说,我认为您正在接近软编码领域。如果字典中的键发生变化,那么使用字典的代码发生变化是可以的。

于 2009-03-18T02:31:53.867 回答
0

就个人而言,我使用你的方法。它非常明智,简单,并且解决了实际问题。

于 2009-03-18T02:27:07.997 回答
0

我通常做同样的事情;如果密钥总是相同的,请用任何语言制作一个“常量静态”来保存密钥。

于 2009-03-18T02:29:02.280 回答