将数字分配给数组中的字母

时间:2014-01-15 17:18:36

标签: ruby arrays

我想要做的是使用array.each将每个字母转换为字母表中的相应字母加九。我知道可以通过所有26个字母来对抗case,但这似乎是不必要的。

例如。假设数组是:

["N", "O", "T", "H", "I", "N", "G"]

我希望数组成为

["23", "24", "29", "17", "19", "24", "17"]

5 个答案:

答案 0 :(得分:9)

这是一种方式:

arr.map {|ch| ch.ord - 'A'.ord + 10}

答案 1 :(得分:5)

另一种解决方案可能是使用

plus = 9
nothing = ["N", "O", "T", "H", "I", "N", "G"]
alphabet = ('A'..'Z').to_a
# => ["A", "B", "C", "D", "E", ..., "Z"] 
nothing.map { |d| alphabet.index(d) + 1 + plus }
# => [23, 24, 29, 17, 18, 23, 16] 

答案 2 :(得分:1)

这是rohit89的Ruby 1.8版本的答案:

ary = ["N", "O", "T", "H", "I", "N", "G"]
ary.map { |str| str[0] - ?A + 10 }
# => [23, 24, 29, 17, 18, 23, 16]

请注意,如果可以,您应该更新自version 1.8.7 is no longer supported以来的Ruby安装。

答案 3 :(得分:0)

一个好方法是使用哈希。 首先创建哈希。我注意到你希望将整数值格式化为字符串,因此哈希值为

hash = Hash[('A'..'Z').to_a.zip(("10".."37").to_a)]

如果您想要整数值,请改用以下哈希

hash = Hash[('A'..'Z').to_a.zip((10..37).to_a)]

然后,您可以使用map

在数组上应用哈希值
print ["N", "O", "T", "H", "I", "N", "G"].map{|char| hash[char]}

答案 4 :(得分:-3)

$hash = {"A" => "1", "B" => "2", "C" => "3"}
$hash["A"] 
"1"

input = ["A", "C", "A"]
input.each do |me| #giggity
 print $hash[me]
 print " "
end

=> 1 3 1