我想用一个Ruby脚本替换遗留系统中的组件。该系统的一部分接受一个包含ASCII'0'和'1'的字符串,显然表示位置的位域。然后它将这些位置转换为一串逗号分隔的两个代码(大部分是美国州)。红宝石多个阵列比较
我有一个Ruby方法可以做到这一点,但它似乎并没有像Ruby那样做的最好方式。 Ruby有一吨的内置的遍历方式和操作阵列,我觉得我不使用它们发挥到极致:
# input "0100010010" should return "AZ,PR,WY"
def locations(bits)
# Shortened from hundreds for this post. :u? is for locations I have't figured out yet.
fields = [ :u?, :az, :de, :mi, :ne, :wy, :u?, :u?, :pr, :u? ]
matches = []
counter = 0
fields.each { |f|
case bits[counter]
when '1' then matches << f
when '0' then nil
else raise "Unknown value in location bit field"
end
counter += 1
}
if matches.include(:u?) then raise "Unknown field bit set" end
matches.sort.join(",").upcase
end
这将是一个更好的方式来做到这一点?
似乎与“Ruby方式”有相反的变量浮动。我试图寻找使用Array#map的方法,并且我发现没有什么明显的。我也试着用Google搜索关于数组的Ruby成语。
编辑此评论 - 我的错误。很好的答案! – joews
优秀的方法。 –