提示是要编写一个ordered_word?方法,该方法返回单词中的字母是否按字母顺序出现。假设该字符串仅包含小写字母,没有空格或标点符号。我的解决方案如下:
def ordered_word?(word)
letters=word.split("")
(0..(letters.length-1)).all? do |i|
if letters[i]<=letters[i+1]
return true
end
end
end
但是,它不能通过我所有的测试用例,我也不知道为什么。参数“ amz”和“ zma”会产生预期的输出,但是即使它类似于“ abcdgfe”,即使它不是一个有序的单词,它仍然会返回true。
答案 0 :(得分:3)
return
从整个方法中返回。您只需通过不指定return
并仅依靠该块的最后一行作为返回值来从该块“返回”,就像这样:
def ordered_word?(word)
letters=word.split("")
(0..(letters.length-1)).all? do |i|
letters[i]<=letters[i+1]
end
end
尽管您可以使用一些方便的红宝石方法将其简化为:
def ordered_word?(word)
word.each_char.each_cons(2).all? do |first, second|
first <= second
end
end
答案 1 :(得分:3)
一个非常简单的比较是:
word.chars.sort.join == word
这是将字符串的字符作为数组,对它们进行字母数字排序,然后将它们重新组合成字符串。然后将该字符串与原始字符串进行比较,如果相等,则不进行任何重新排序,并且已经对该字符串进行了排序。
如果要将其作为方法扩展到String
类:
class String
def ordered?
chars.sort.join == self
end
end