将每个字母大写为元音数组

时间:2016-02-23 16:55:48

标签: ruby string

我正在尝试将元组中的每个字母大写为元音。我有:

vowels = ["a", "e", "i", "o", "u"]

如果vowels包含该字符,那么我将取消它。我做了:

["a", "b", "c"].each do |char|
  if vowels.include?(char)
    char.upcase
  end
end

但它会返回["a", "b", "c"]。我在这里做错了什么?

2 个答案:

答案 0 :(得分:5)

您正在创建一个包含upcase的新字符串,并将其丢弃。您需要使用upcase!将字符串转换为upcase。

["a", "b", "c"].each do |char|
  if vowels.include?(char)
    char.upcase!
  end
end

答案 1 :(得分:1)

使用map代替eacheach将评估该块,但会丢弃结果。这就是为什么你最终得到["a", "b", "c"],或者你想要检查元音的原始数组的内容。

vowels = ["a", "e", "i", "o", "u"]
["a", "b", "c"].map do |char|
  char.upcase if vowels.include?(char)
end.compact

map创建一个新数组,其中每个元素都是块返回的结果。 compact将删除所有nil值或非元音值(块未返回true)。