我在ruby中练习的最长单词测试

我在ruby中练习的最长单词测试,ruby,Ruby,我正在尝试做这个测试,在这里有很多在线解决方案,但我首先想弄清楚为什么我的解决方案是错误的,尽管当我输入某些字符串时,它似乎给出了正确的结果: 他们的问题是: 编写一个接受字符串的方法。返回列表中最长的单词 一串您可以假设字符串只包含字母和 空间 您可以使用Stringsplit方法来帮助您完成任务 这是我的解决方案,我认为我可以将字符串转换为数组,从最大长度降序排序,然后只打印新字符串中的第一个元素,如下所示: def longest_word(sentence) sentence = s

我正在尝试做这个测试,在这里有很多在线解决方案,但我首先想弄清楚为什么我的解决方案是错误的,尽管当我输入某些字符串时,它似乎给出了正确的结果:

他们的问题是:

编写一个接受字符串的方法。返回列表中最长的单词 一串您可以假设字符串只包含字母和 空间

您可以使用String
split
方法来帮助您完成任务

这是我的解决方案,我认为我可以将字符串转换为数组,从最大长度降序排序,然后只打印新字符串中的第一个元素,如下所示:

def longest_word(sentence)
  sentence = sentence.split

  sentence.sort_by! { |longest| -longest.length }

  return sentence[0]
end
这显然不起作用,因为他们的测试结果都是假的。以下是测试:

puts("\nTests for #longest_word")
puts("===============================================")
    puts(
      'longest_word("short longest") == "longest": ' +
      (longest_word('short longest') == 'longest').to_s
    )
    puts(
      'longest_word("one") == "one": ' +
      (longest_word('one') == 'one').to_s
    )
    puts(
      'longest_word("abc def abcde") == "abcde": ' +
      (longest_word('abc def abcde') == 'abcde').to_s
    )
puts("===============================================")

所以问题是为什么?我可以修改我的代码吗?或者我的想法完全错了,我需要做完全不同的事情吗?

我会这样写:

str = "Write a method that takes in a string"
str.split.sort_by(&:length).last # => "string"
此正则表达式的内容为“匹配一个或多个字符”。外括号构成一个字符类,这意味着括号内的一个字符必须匹配

要处理连字符或包含单引号的单词,以下是不完善的修改1:

此正则表达式的内容为“匹配一个或多个字母、撇号或连字符”。外括号构成一个字符类,这意味着括号内的一个字符必须匹配


1我在拼字游戏中成功地使用了“舔手指”。

对我很有用。都是真的。当我把我的代码放在他们的编辑器中时,我得到的都是假的。当我把他们的代码放到你本地的ruby中时,我得到了所有的真实体验。哦…它在我的ruby中确实有效。我想他们的不好。非常感谢。不要使用
-longest.length
反转排序。相反,请使用
reverse
方法,该方法将
反向。为什么不干脆
last
last
也可以。我在键入OP使用的
-longest.length
来反转数组,这不是最快的。“舔手指”?一定是一些本土规则,因为不允许使用“-licken”。
str = "Which word in this string is longest?"

r = /[[:alpha:]]+/
str.scan(r).max_by(&:length)
  #=> "longest"
str = "Who said that chicken is finger-licken' good?"

r = /[[[:alpha:]]'-]+/
str.scan(r).max_by(&:length)
  #=> "finger-licken'"