我有一个生成随机字符串的方法:
def generate_letters(length)
chars = 'ABCDEFGHJKLMNOPQRSTUVWXYZ'
letters = ''
length.times { |i| letters << chars[rand(chars.length)] }
letters
end
我想将值映射到生成的字符串,例如(1): A = 1,B = 2,C = 3,例如(2): 如果我生成ACB它等于132.有什么建议吗?
答案 0 :(得分:1)
您可以使用它来连接这些值:
s = 'ACB'
puts s.chars.map{ |c| c.ord - 'A'.ord + 10 }.join.to_i
# => 101211
并使用Enumerable#inject
方法来总结它们(参见文档,有一些很好的例子):
s.chars.inject(0) { |r, c| r + (c.ord - 'A'.ord + 10) } # => 33
或Enumerable#sum
如果您在Rails中执行此操作:
s.chars.sum { |c| c.ord - 'A'.ord + 10 } # => 33
答案 1 :(得分:1)
你如何处理10(J)以上的模糊性?
例如,您如何区分BKC=2113
和BAAC=2113
?
忽略此问题,您可以这样做:
def string_to_funny_number(str)
number=''
str.each_byte{|char_value| number << (1 + char_value - 'A'.ord).to_s}
return number.to_i
end
此函数将通过连接每个字母值(A = 1,B = 2,...)生成正确的int 请注意,此函数不会清理输入,因为我假设您正在使用其他函数的输出。