来自字符串的 Ruby 缩写创建器

rue*_*azy 1 ruby loops acronym

我正在创建一个函数,它接受一个字符串并创建一个首字母缩略词,但遇到了错误。当我输入时,"Complementary metal-oxide semiconductor"我会"CS"在期待时得到回报"CMOS"。有什么建议为什么会发生这种情况吗?我向它传递了很多其他字符串,它可以工作,只是在这种情况下不起作用。

class Acronym

    def self.abbreviate(phrase)
        letters = phrase.split("")
        acronym = []
        letters.each do |letter|
            previous = letters.index(letter) - 1
            if previous == -1
                acronym.push(letter)
            elsif letters[previous] == " " || letters[previous] == "-"
                acronym.push(letter)
            end
        end
        acronym.join("").upcase
    end

end
Run Code Online (Sandbox Code Playgroud)

Mor*_*ori 5

简化为

def acronym(str)
  str.split(/ |-/).map(&:first).join.upcase
end
Run Code Online (Sandbox Code Playgroud)

以上依赖于Rails activesupport库。这是仅 Ruby 的变体:

str.split(/ |-/).map { |s| s[0] }.join.upcase 
Run Code Online (Sandbox Code Playgroud)