我尝试使用: unit_type属性中的文本在一个新的散列数组中分配一个名称。
这是我的数据
class Unit
attr_accessor :name
attr_accessor :imported_id
attr_accessor :country
attr_accessor :unit_type
raw_stuff = [{:old_id=>576, :name=>"16th Armored Division (USA) "}, {:old_id=>578, :name=>"20th Armored Division (USA)"}, {:old_id=>759, :name=>"27th Armoured Brigade (UK)"}, {:old_id=>760, :name=>"- 13th/18th Royal Hussars"}, {:old_id=>761, :name=>"- East Riding of Yorkshire Yeomanry "}, {:old_id=>762, :name=>"- Staffordshire Yeomanry "}, {:old_id=>769, :name=>"A I R B O R N E "}, {:old_id=>594, :name=>"1st Airborne Division (UK)"}, {:old_id=>421, :name=>"6th Airborne Division (UK)"}]
units = []
raw_stuff.each do |unit_hash|
u = Unit.new
u.name = unit_hash[:name].sub("-","").lstrip
u.unit_type = unit_hash[:name].scan("Division")
puts u.unit_type
puts u.name
end
end这会适当地将"division“指定为unit_type。然而,我似乎不能指定其他任何东西,例如"brigade“。我应该使用if或where条件吗?
When I use the following code:
raw_stuff.each do |unit_hash|
u = Unit.new
u.name = unit_hash[:name].sub("-","").lstrip
if unit_hash[:name].scan("Division")
u.unit_type = "Division"
elsif unit_hash[:name].scan("Brigade")
u.unit_hash = "Brigade"
else
u.unit_hash = nil
end
puts u.unit_type
puts u.name
end我最终被分派到每个单位。
发布于 2013-03-06 05:25:27
可爱的一句话:
u.unit_type = unit_hash[:name][/Division|Brigade/]代码中的错误是,当scan没有找到任何东西时,它会返回一个空数组([]),并且空数组是“真实的”。您正在寻找的方法是include?,我的解决方案通过直接将字符串搜索结果(可以是nil)赋给单位类型,完全绕过了条件。
发布于 2013-03-05 05:49:08
试试这个:
if unit_hash[:name].include?("Division")
u.unit_type = "Division"
elsif unit_hash[:name].include?("Brigade")
u.unit_type = "Brigade"
else
u.unit_type = nil
endhttps://stackoverflow.com/questions/15211685
复制相似问题