当我工作有的散列表/辞典我有时很难与如何指定的钥匙。

例如:如果我创建了一个简单的字典(使用Python为这个例子),

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

我可以访问的价值(在其他模块)与关键的价值观:(foo['bar'])和获得 baz 回来。

在的话博士邪恶的,"相当标准的,真的。"

不幸的是,使用的是静态串钥匙紧夫妻任何一个模块,使用这本词典为其执行情况。当然,这也可以申请时使用的其他关键类型(例如枚举,对象,等等);无论如何你切,所有模块的访问的典需要知道的价值观的钥匙。

要解决这一问题,我通常使用静态的不断串数值(或枚举,如果可用的语言)的钥匙,并将它们储存在公开的当地类/模块,或在一个单独模块/类。因此,任何更改的字典键自己都保存在一个单一的位置。

这通常是这样的:

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

是否有更好的办法指定的钥匙这样,使用该词典并不一定两个模块/类其实施?

注:我已经看到了一些答复中所以其地址(例如 酒店对参考-a-key-value-对-in-a-字典的),但该专题似乎没有为解决这一问题。答案是有帮助的,但我想更广泛的经验。

有帮助吗?

解决方案

为什么不把这个类,只包含属性?这与Python(据我所知)很好做,并与其他语言的作品也很好。重构的名字是平凡与今天的工具了。

其他提示

在这里我传递的对象周围的情况下,我已经知道了钥匙,我总是喜欢添加属性的对象。海事组织,词典的使用情况是,当你不知道键是什么。

Python是微不足道的:

foo.bar=baz

Java是几乎相同的:

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

Python的性能将是几乎相同的,因为一个属性查找仅仅是一个字典查找和Java性能会更好。

我有时创建一个单独的类来保存字典键。这给了他们自己的命名空间,以及具有键是常量字符串,即你没有错别字的风险,你得到的代码完成的定期收益和字符串值是很容易改变。如果你不希望创建一个单独的类,你得到所有的好处,除了一个命名空间距离有常量字符串。

这是说,我觉得你越来越接近软编码领土。如果在字典变化的钥匙,它使用字典来改变的代码确定。

我个人使用方法。这是非常明智的,简单的,解决实际问题。

我通常做同样的事情;如果密钥总是将是一样的,做一个“常量静态”在任何一种语言来保存键。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top