将整数值映射到数组中的字符

时间:2011-12-27 16:14:27

标签: ruby-on-rails-3 mapping chars

我有一个生成随机字符串的方法:

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.有什么建议吗?

2 个答案:

答案 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=2113BAAC=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 请注意,此函数不会清理输入,因为我假设您正在使用其他函数的输出。