检查特定键的哈希值是否包含特定值ruby

时间:2015-03-12 22:48:46

标签: ruby-on-rails ruby ruby-on-rails-3 hash

我有关键和多个值的哈希值。现在我必须检查该多个值中是否存在特定值。

我的哈希的结构是这样的......

@allinfo[hour_idx].push({"id" => w.id, "cat" => w.cat, "value" => w.value})

现在我想检查allinfo [hour_idx]键是否已存在id。 我试图使用if(@ allinfo.has_value?(w.id)但它不起作用,我猜becoz我是多个值的自定义对象。

我的主要目标是不要在特定键的值中包含多个id。 我希望我清楚我除了...谢谢

谢谢

1 个答案:

答案 0 :(得分:0)

如果我是你,我将您的数据结构更改为哈希而不是数组,然后您可以使用w.id作为哈希键来进行更简单(和更快速)的检查。< / p>

@allinfo[hour_idx] = {}
@allinfo[hour_idx][w.id] = { "cat" => w.cat, "value" => w.value }

您不清楚是否要用新的元素覆盖现有的w.id元素:

@allinfo[hour_idx][new.id] = { "cat" => new.cat, "value => new.value }

...如果已经存在新的那些,则不添加新的:

@allinfo[hour_idx][new.id] ||= { "cat" => new.cat, "value => new.value }

如果您愿意,即使您使用"id" => w.id作为外键,也可以继续将w.id元素存储在随附的哈希值中。然后,您可以获得与当前简单相同的哈希数组:

@allinfo[hour_idx].values