Ruby中哈希中的多个键值对

时间:2012-02-29 20:23:53

标签: ruby loops hash

修改

简短

我有一个实体的3个属性,我有大约100个这样的实体。我需要一个好的数据结构来存储它们并有效地检索它们。

示例:

让我们考虑一个100像素的图像。

每个像素都有三个属性 - 红色,绿色和蓝色。我需要将整个图像的像素和RGB值存储在像Hash这样的数据结构中。

我想到的一个示例数据结构是这样的:

x={[:red => 1, :green => 2, :blue => 3],[:red => 21, :green => 21, :blue => 32], [:red => 21, :green => 21, :blue => 32]}

我的问题:

1)是否有更好的方法来存储这些数据集? 2)是否有一种有效的方式来访问这些集合数据?

换句话说,什么是最简单的有效的方式来存储多个键值对设置数据并有效地访问它们?

免责声明:我是Ruby的新手(取得了50%的进步)。

谢谢。

1 个答案:

答案 0 :(得分:1)

我认为这就是你所要求的,所以请澄清一下我是不是基地。您想要一种快速简便的方法来获取哈希并使用x.red等方法将其转换为对象,是否正确? OpenStruct可能就是答案:

require 'ostruct'
hash = { :red => 1, :green => 2, :blue => 3 }
colorset = OpenStruct.new(hash)

然后你可以打电话:

colorset.red + colorset.green + colorset.blue

得到:

=> 6

修改

根据你的评论,忘记上面的内容,我认为你只需要带有意义键的嵌套哈希:

colors = { 'fuschia' => { 'red'=> 1 , 'green' => 2, 'blue' => 3 }, 
           'goldenrod' => { 'red'=> 2, 'green' => 3, 'blue'=> 4 } }

然后访问如下值:

colors['fuschia']['red']
=> 1