将整数分配给字符串中的多个字符

时间:2014-02-09 19:11:16

标签: ruby string integer ord

我正在尝试为字符串中的多个字符分配一个整数。

def userinput(input)
  @user = input.upcase.delete('^A-Z').chars.each_slice(5).map(&:join)
end

=> userinput("This is test to convert multiple characters in a string")
=> ["THISI","STEST","TOCON", "VERTM", "ULTIP", "LECHA", "RACTE", "RSINA", "STRIN", "G"]

获取此数组后,我想为字符串中的每个字符分配一个整数,所以我尝试了类似的东西......

=> @user.map {|ch| ch.ord - 'A'.ord + 1}

不幸的是,我只得到第一个字母的相应字母整数。

=> [20, 19, 20, 22, 21, 12, 18, 18, 19, 7]

如果有人能给我一个关于如何分配每个字符串的其余4个剩余字母的提示,我会非常感激,以便输出如下:

=> ["ABCDE", "ABCDE"]
=> [12345, 12345]

2 个答案:

答案 0 :(得分:1)

将新数组中的每个字符串转换为字符数组,然后将每个字符转换回字母表中的位置,就像您正在执行的那样将它们连接成字符串

@user = ["THISI","STEST","TOCON", "VERTM", "ULTIP", "LECHA", "RACTE", "RSINA", "STRIN", "G"]
@user.map(&:chars).map do |arr| 
  arr.inject("") do |str,ch| 
    str << (ch.ord - 'A'.ord + 1).to_s 
  end
end
 => ["2089199", "192051920", "201531514", "225182013", "211220916", "125381", "1813205", "18199141", "192018914", "7"]

答案 1 :(得分:0)

这是以更多Rubyish方式做的诀窍:

@user = ["THISI","STEST","TOCON"]
@user.map { |s| s.gsub(/[a-z]/i) { |m| m.ord - 'A'.ord + 1 } }
# => ["2089199", "192051920", "201531514"]

首先,您需要从gsub(pattern) {|match| block } → new_str查看#gsub的魔力。

  

阻止表单 中,当前匹配字符串作为参数传递,变量如$1$2,{ {1}} $&amp; $, $'`将被正确设置。块返回的值将替换每次调用的匹配。

相关问题