【发布时间】:2011-03-13 07:51:16
【问题描述】:
我很乐意通过更短的表达式访问多维哈希数组的任何元素
h = {a: {b: 'c'}}
# default way
p h[:a][:b] # => "c"
# a nicer way
p h[:a,:b] # => "c"
# nice assignment
h[:a,:b] = 1
p h # => {:a=>{:b=>1}}
我意识到通过这种方式可以消除将哈希键作为数组的可能性。
{[:a,:b] => "c"}
由于这种情况很少见,我宁愿减少表达式中 [] 的数量。
如何做到这一点?
更新
好吧,我不清楚。问题是我尝试自己制作自定义 [] 和 []= 方法,但失败了。你能告诉我如何实现这样的功能吗?
多维数组
如果您正在寻找类似的数组,请查看narray gem http://narray.rubyforge.org/
>> a = NArray.int(5,5)
=> NArrayint5,5:
[ [ 0, 0, 0, 0, 0 ],
[ 0, 0, 0, 0, 0 ],
[ 0, 0, 0, 0, 0 ],
[ 0, 0, 0, 0, 0 ],
[ 0, 0, 0, 0, 0 ] ]
>> a[1,2]
=> 0
>> a[1,2]=1
=> 1
>> a
=> NArrayint5,5:
[ [ 0, 0, 0, 0, 0 ],
[ 0, 0, 0, 0, 0 ],
[ 0, 1, 0, 0, 0 ],
[ 0, 0, 0, 0, 0 ],
[ 0, 0, 0, 0, 0 ] ]
>> a[1,0..4]=1
=> 1
>> a
=> NArrayint5,5:
[ [ 0, 1, 0, 0, 0 ],
[ 0, 1, 0, 0, 0 ],
[ 0, 1, 0, 0, 0 ],
[ 0, 1, 0, 0, 0 ],
[ 0, 1, 0, 0, 0 ] ]
【问题讨论】:
-
我会使用所有需要的 []。否则,其他人会混淆查看您的代码的人。
-
好的,我保证只为我自己保留这段代码,或者在我每次使用它时提供清晰的 cmets。 :)
-
@DanSingerman 我希望有 cmets 的赏金。是的。一千次是的。 @Andrei请不要为了(可以说)“更好”的查找而重新定义语言语法的这样一个基本方面。与您共事的任何人(几个月后您自己)只会被淘汰。
-
:) 我非常理解你的观点。不过别担心,除了这里,我不会给任何人看的。