我想用一個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
優秀的方法。 –