【问题标题】:Multiple Key-Value pairs in a Hash in RubyRuby中哈希中的多个键值对
【发布时间】:2012-03-01 20:43:37
【问题描述】:

编辑:

简而言之

我有一个实体的 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% 的进步)。

谢谢。

【问题讨论】:

  • 嗨。你在哪里看到那个哈希?它存在语法问题:哈希看起来像x = { 'red' => '1', 'green' => '2' }。并且哈希键是唯一的,因此当您使用第二个 'red' 键时,您已经删除了第一个键。
  • 哈希有一个键和一个值。键和值都是 ruby​​ 对象。如果你的键是一个字符串,它就是一个字符串。此外,您的哈希值有问题。您实际上是在复制您在屏幕上看到的内容,还是在重新输入?
  • @Marc Talbot 嗨,这些正是我从 RMAGICK 得到的输出。我正在使用 color_histogram 给我这个散列,以防有帮助。这是文档的链接:imagemagick.org/RMagick/doc/image1.html#color_histogram
  • @Tom L 这就是我选择问这个问题的原因之一,这种语法很奇怪,但我上面引用的代码有效,我能够检索它的值。无论如何,感谢您的澄清!由于我的原始哈希无效,让我们假设 - 我想要这样的东西: x={[red=0,green=1,blue=3],[red=2,green=5,blue=2],[red =1,green=4,blue=3]} 在 Ruby 中重新创建这样的数组哈希(并访问它)的最简单方法是什么?有什么想法吗?
  • color_histogram 返回一个哈希,其中键是像素对象,值是数字。

标签: ruby loops hash


【解决方案1】:

我想这就是你要问的,所以如果我不在基地,请澄清一下。您想要一种快速简便的方法来获取散列并将其转换为具有 x.red 之类的方法的对象,对吗? OpenStruct 可能是答案:

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

然后你可以调用:

colorset.red + colorset.green + colorset.blue

得到:

=> 6

编辑:

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

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

然后像这样访问值:

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

【讨论】:

  • 嗯,非常接近,但是,我需要访问类似:hash={[:red => 1, :green => 2, :blue => 3],[:red => 21, :green => 21, :blue => 32], [:red => 21, :green => 21, :blue => 32]} 感谢您的意见!
  • 换句话说,(我把这个留给你)你如何存储多个键值对数据并有效地访问它们?上面的哈希是我想要实现的一个例子。编辑:为了更清楚一点 - 每个像素我有 3 个属性(红色、绿色、蓝色),我有大约 100 个像素。我需要一个好的数据结构来存储它们并有效地检索它们。感谢您的意见!
  • @dsignr 没有比这更好的了:)
猜你喜欢
  • 1970-01-01
  • 2021-05-25
  • 2014-06-05
  • 2011-06-30
  • 2014-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-13
相关资源
最近更新 更多