ruby - 以有条件的方式构建哈希

标签 ruby hash conditional

我正在使用 Ruby on Rails 3.0.10,我想以有条件的方式构建哈希键\值对。也就是说,如果条件匹配,我想添加一个键及其相关值:

hash = {
  :key1 => value1,
  :key2 => value2, # This key2\value2 pair should be added only 'if condition' is 'true'
  :key3 => value3,
  ...
}

我怎样才能做到这一点并保持代码的“良好”可读性?我是否“被迫”使用 merge 方法?

最佳答案

我更喜欢 tap,因为我认为它提供了比这里描述的解决方案更清晰的解决方案,因为它不需要对元素进行任何 hacky 删除,并且明确定义了构建哈希的范围。

这也意味着您不需要声明不必要的局部变量,这是我一直讨厌的。

如果您以前没有遇到过,tap 非常简单 - 它是 Object 上的一个方法,它接受一个 block 并始终返回它被调用的对象在。因此,要有条件地构建哈希,您可以这样做:

Hash.new.tap do |my_hash|
  my_hash[:x] = 1 if condition_1
  my_hash[:y] = 2 if condition_2
  ...
end

tap 有很多有趣的用途,这只是一个。

关于ruby - 以有条件的方式构建哈希,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7328647/

相关文章:

Excel 公式/VBA 代码仅对包含值的单元格求和(跳过任何包含公式的单元格)?

variables - 在 Go 中设置全局条件变量

ruby - Ruby Anagram算法的时空复杂度

ruby - 在 Ruby 中舍入到最接近的整数或最接近的 .5

c++ - 将字符串和整数散列在一起?

hash - "over"中的 "overpass-the-hash"是什么意思?

ruby - 在 Ruby 中使用模数 % 运算符时出现逻辑错误

html - 如何在 Rails3 中解析上传的 txt 文件

asp.net - 尽管有 MSDN 解决方法,散列法在 .Net 4.0 中不再有效

c - 在 C 中,什么时候支持条件 "test ? : alt"形式(空的 true 大小写)?