原谅我缺乏代码,但我无法找到实现以下目标的最佳方法:
两个字符串(由于前导0而存储为字符串 - 它们是电话号码):
a = '0123456700'
b = '0123456750'
我正在尝试找到一种方法将它们写为范围如下
0123456700 - 750
而不是
0123456700 - 0123456750
我现在有。
它并不像获取b
的最后3位数那样简单,因为范围可能会有所不同,也许最多可达4位数,因此我正在努力寻找能够做到这一点的最佳方法。
答案 0 :(得分:3)
我会查找第一个不相等的字符对的索引:
a = '0123456700'
b = '0123456750'
index = a.chars.zip(b.chars).index { |x, y| x != y }
#=> 8
并使用以下内容提取后缀:
"#{a} - #{b[index..-1]}" if index
#=> "0123456700 - 50"
答案 1 :(得分:2)
从我的个人图书馆(简化):
def common_prefix first, second
i = 0
loop{break unless first[i] and second[i] == first[i]; i += 1}
first[0, i]
end
a = "0123456700"
b = "0123456750"
c = "0123457750"
common_prefix(a, b)
# => "01234567"
"#{a} - #{b.sub(common_prefix(a, b), "")}"
# => "0123456700 - 50"
"#{a} - #{c.sub(common_prefix(a, c), "")}"
# => "0123456700 - 7750"
请注意。只有在假设所有字符串都正确填充0
并且长度相同的情况下,这才能正常工作。
答案 2 :(得分:2)
这是一个返回范围的方法:
def my_range(a, b)
a = a.delete(" ") # remove all spaces from string
b = b.delete(" ")
a, b = b, a if a.to_i > b.to_i # a is always smaller than b
ai, bi = a.to_i, b.to_i
pow = 1
while ai > 1
pow += 1
len = pow if ai % 10 != bi % 10
ai /= 10
bi /= 10
end
a + " - " + b[-len..-1]
end
puts my_range("0123456700", "0123456750") # 0123456700 - 750
puts my_range("0123456669", "0123456675") # 0123456669 - 675
puts my_range("0123400200", "0123500200") # 0123400200 - 3500200
puts my_range("012 345 678", "01 235 0521") # 012345678 - 350521