我想要做的是使用array.each
将每个字母转换为字母加上9的相应字母。我知道有可能通过全部26封信来对付case
,但这似乎没有必要。将数字分配到数组中的字母表
例如。说数组是:
["N", "O", "T", "H", "I", "N", "G"]
我想要的阵列成为
["23", "24", "29", "17", "19", "24", "17"]
我想要做的是使用array.each
将每个字母转换为字母加上9的相应字母。我知道有可能通过全部26封信来对付case
,但这似乎没有必要。将数字分配到数组中的字母表
例如。说数组是:
["N", "O", "T", "H", "I", "N", "G"]
我想要的阵列成为
["23", "24", "29", "17", "19", "24", "17"]
这里有一个方法:
arr.map {|ch| ch.ord - 'A'.ord + 10}
我得到的错误 (EVAL):675:未定义的方法 '的ord' 为 “N”:从在 '地图' \t(EVAL)::字符串(NoMethodError) \t从(EVAL):675 675 – Bluethousandand2
@ Bluethousandand2这是因为你使用的是Ruby 1.8,你应该在你的问题中指定。 – toro2k
$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
另一种解决方案可以使用
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.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安装。
一个不错的方法是使用散列。 首先创建哈希。我注意到你想整数值格式化为字符串,所以散列要
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]}
相信你的问题是:我想每个字母转换的信其从“A”偏移的阵列,加上10。例如,“B” => 1 + 10 = 11.如果结果是一个inte数组正如解决方案中所假设的那样。如果你想要用字符串表示这些整数,如你的问题所示,你应该这样说;否则将其改为整数数组。 “G”=> 16,而不是17.我建议你编辑你的问题。 –
作为SO的新手,你想阅读[this](http://stackoverflow.com/help/someone-answers)。 –