ruby 中 case when 语句的替代方案
Alternative for case when statement in ruby
我正在根据散列值分配一组值。
我必须根据传入哈希键的值将值分配给另一个哈希键。
传入的哈希中有超过 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
你可以直接将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
你也可以使用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
这是另一种选择:根本不使用 case/when。
mapping = {
'value1' => value_1,
'value2' => value_2,
...
}
@array1.each do |a1|
@array2[a1.field_id] = mapping[a1.mapped_field]
end
作为一个令人愉快的奖励,您现在可以通过编程方式构建映射(通过从 file/database 或类似的东西加载它)。
我正在根据散列值分配一组值。
我必须根据传入哈希键的值将值分配给另一个哈希键。
传入的哈希中有超过 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
你可以直接将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
你也可以使用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
这是另一种选择:根本不使用 case/when。
mapping = {
'value1' => value_1,
'value2' => value_2,
...
}
@array1.each do |a1|
@array2[a1.field_id] = mapping[a1.mapped_field]
end
作为一个令人愉快的奖励,您现在可以通过编程方式构建映射(通过从 file/database 或类似的东西加载它)。