在ruby中声明的情况的替代方案

时间:2018-01-23 11:52:38

标签: ruby-on-rails arrays ruby switch-statement case-statement

我根据哈希值分配一组值。

我必须根据传入的哈希键的值为另一个哈希键分配值。

传入哈希中有超过10个键(因此超过10个)。

我想最小化代码。是否有任何替代方法可以缩短代码。

@hash1.each do |h1|
  case h1.mapped_field
    when 'value1'
      @hash2[h1.field_id] = value_1
    when 'value2'
      @hash2[h1.field_id] = value_2
    when 'value3'
      @hash2[h1.field_id] = value_3
    when 'value4'
      @hash2[h1.field_id] = value_4
    when 'value5'
      @hash2[h1.field_id] = value_5
  end
end

3 个答案:

答案 0 :(得分:10)

这是另一种选择:不使用案例/何时使用。

mapping = {
  'value1' => value_1,
  'value2' => value_2,
  ...
}

@array1.each do |a1|
  @array2[a1.field_id] = mapping[a1.mapped_field]
end

作为一个令人愉快的奖励,您现在可以通过编程方式构建映射(通过从文件/数据库或类似的东西加载它)。

答案 1 :(得分:2)

您可以直接将case语句的结果分配给变量,如下所示:

@array1.each do |a1|
  @array2[a1.field_id] = case a1.mapped_field
    when 'value1'
      value_1
    when 'value2'
      value_2
    when 'value3'
      value_3
    when 'value4'
      value_4
    when 'value5'
      value_4
  end
end

答案 2 :(得分:2)

您也可以使用then

@array1.each do |a1|
  @array2[a1.field_id] = case a1.mapped_field
    when 'value1' then value_1
    when 'value2' then value_2
    when 'value3' then value_3
    when 'value4' then value_4
    when 'value5' then value_5
  end
end