2014-01-15 30 views
2

我想要做的是使用array.each将每个字母转换为字母加上9的相应字母。我知道有可能通过全部26封信来对付case,但这似乎没有必要。将数字分配到数组中的字母表

例如。说数组是:

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

我想要的阵列成为

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

+0

相信你的问题是:我想每个字母转换的信其从“A”偏移的阵列,加上10。例如,“B” => 1 + 10 = 11.如果结果是一个inte数组正如解决方案中所假设的那样。如果你想要用字符串表示这些整数,如你的问题所示,你应该这样说;否则将其改为整数数组。 “G”=> 16,而不是17.我建议你编辑你的问题。 –

+0

作为SO的新手,你想阅读[this](http://stackoverflow.com/help/someone-answers)。 –

回答

8

这里有一个方法:

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

+0

我得到的错误 (EVAL):675:未定义的方法 '的ord' 为 “N”:从在 '地图' \t(EVAL)::字符串(NoMethodError) \t从(EVAL):675 675 – Bluethousandand2

+0

@ Bluethousandand2这是因为你使用的是Ruby 1.8,你应该在你的问题中指定。 – toro2k

-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 
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] 
1

这里的红宝石1.8版本rohit89的回答:

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安装。

0

一个不错的方法是使用散列。 首先创建哈希。我注意到你想整数值格式化为字符串,所以散列要

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

如果你想整数值,使用下面的哈希,而不是

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

然后你可以将哈希该阵列使用地图

print ["N", "O", "T", "H", "I", "N", "G"].map{|char| hash[char]} 
相关问题