gpt4 book ai didi

Ruby 多数组比较

转载 作者:数据小太阳 更新时间:2023-10-29 08:20:20 24 4
gpt4 key购买 nike

我正在尝试用 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

执行此操作的更好方法是什么?

让计数器变量四处 float 似乎与“Ruby 方式”背道而驰。我试着寻找使用 Array#map 的方法,但我找不到任何明显的东西。我还尝试使用谷歌搜索与数组有关的 Ruby 习语。

最佳答案

matches = fields.select.with_index { |_,i| bits[i] == '1' }
# => [:az, :wy, :pr]

要验证 bits 只包含 01,您仍然可以这样做

raise "Unknown value in location bit field" if !bits.match(/^[01]*$/)

关于Ruby 多数组比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22366185/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com