Ruby获得句子中最长的单词

我正在尝试创建一个名为longest_word方法,该方法将一个句子作为参数,该函数将返回句子中最长的单词。

我的代码是:

 def longest_word(str) words = str.split(' ') longest_str = [] return longest_str.max end 

这取决于您希望如何拆分字符串。 如果您对使用单个空间感到满意,那么这可行:

 def longest(source) arr = source.split(" ") arr.sort! { |a, b| b.length <=> a.length } arr[0] end 

否则,使用正则表达式来捕获空格和puntuaction。

最短的方法是使用Enumerable的max_by

 def longest(string) string.split(" ").max_by(&:length) end 

使用regexp将允许您考虑标点符号。

 s = "lorem ipsum, loremmm ipsummm? loremm ipsumm...." 

第一个最长的词:

 s.split(/[^\w]+/).max_by(&:length) # => "loremmm" # or using scan s.scan(/\b\w+\b/).max_by(&:length) # => "loremmm" 

您也可能有兴趣获取所有最长的单词:

 s.scan(/\b\w+\b/).group_by(&:length).sort.last.last # => ["loremmm", "ipsummm"] 
 def longest_word(sentence) longest_word = "" words = sentence.split(" ") words.each do |word| longest_word = word unless word.length < longest_word.length end longest_word end 

这是一种接近它的简单方法。 您还可以使用gsub方法去除标点符号。

function样式版本

 str.split(' ').reduce { |r, w| w.length > r.length ? w : r } 

另一个使用max

 str.split(' ').max { |a, b| a.length <=> b.length } 

如果您真的想以Ruby方式实现它,那将是:

 def longest(sentence) sentence.split(' ').sort! { |a, b| b.length <=> a.length }[0] end