我正在尝试编写代码以将一个单词转换为拼音字母。期望的返回值应该是这样的:
# >> Type your name and I will convert it to Phonetic Alphabets!
Kevin
# >> Kilo Echo Victor India November
我写了一个哈希。
puts "Type your name and I will convert it to Phonetic Alphabets!"
name = gets.chomp
nato_keys = {
"A": "Alpha", "B": "Bravo", "C": "Charlie",
"D": "Delta", "E": "Echo", "F": "Foxtrot",
"G": "Golf", "H": "Hotel", "I": "India",
"J": "Juliett","K": "Kilo", "L": "Lima",
"M": "Mike", "N": "November","O": "Oscar",
"P": "Papa", "Q": "Quebec", "R": "Romeo",
"S": "Sierra", "T": "Tango", "U": "Uniform",
"V": "Victor", "W": "Whiskey", "X": "X-ray",
"Y": "Yankee", "Z": "Zulu"
}
def nato()
puts name.nato_keys.upcase().join(" ")
end
我的方法有问题,因为它会触发错误。
答案 0 :(得分:4)
因为没有人提到它,所以这里是values_at
的解决方案(假定替换键中的字符串键应该是正确的)。
str = "Kevin"
nato_keys.values_at(*str.upcase.chars).join(' ')
答案 1 :(得分:3)
假设要转换的单词数大于26,则在进行任何转换之前准备适当的哈希是合理的。
IF r_ucomm EQ '&PROC'.
LOOP AT it_input INTO ls_input.
PERFORM process_data USING ls_input.
ENDLOOP.
ENDIF.
假设
H = nato_keys.transform_keys(&:to_s)
#=> {"A"=>"Alpha", "B"=>"Bravo",..., "Z"=>"Zulu"}
word = gets.chomp
然后
word = "Kevin"
答案 2 :(得分:0)
您想这样做:
name.chars.map { |x| nato_keys[x.upcase.to_sym] }.join(' ')
此name.chars
给出了字符串name
的每个字符的枚举,map
在每个字符上进行迭代并将其转换为块中的指令。
块{ |x| nato_keys[x.upcase.to_sym] }
,为字符选择相关的映射,但是在此之前,它将键转换为大写和符号(因为在nato_keys
中,键是符号)。 “ a”将变成:A
。
在进行了块操作之后,我们将结果与''连接起来以得到结果字符串。
答案 3 :(得分:0)
name.upcase.chars.map(&:intern).map(&nato_keys).join(' ')
首先,我们upcase
整个字符串。然后,我们将字符串分成每个单独的字符,并将每个字符变成一个符号。然后,我们可以映射一次将它们一次发送到nato_keys
元素引用[]
的字符,返回语音单词并转换名称。最后,用空格将它们连接起来以格式化新字符串。
编辑:使用哈希元素引用时,我们可以调用哈希本身。
答案 4 :(得分:0)
正如卡里·斯沃夫兰(Cary Swoveland)所说,确实没有意义的哈希nato_keys
必须转换为有意义的哈希:
nato_keys.transform_keys!(&:to_s)
给出:
name = "Kevin"
然后
name.gsub(/(\A)?./){"#{" " unless $1}#{nato_keys[$&.upcase]}"}
# => "Kilo Echo Victor India November"
答案 5 :(得分:-1)
我将从准备更强大的哈希进行转换
开始transform =
nato_keys.
flat_map do |k, v|
v = v + ' '
[[k.to_s, v], [k.to_s.downcase, v]]
end.
to_h.
tap { |h| h.default_proc = ->(h, k) { h[k] = k } }
现在,您可以轻松地转换单词了:
"Kevin".gsub(/./, transform).strip
#⇒ "Kilo Echo Victor India November"