Ruby获得句子中最长的单词

时间:2014-02-24 01:38:47

标签: ruby

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

我的代码是:

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

8 个答案:

答案 0 :(得分:14)

最短的方法是使用Enumerable的max_by

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

答案 1 :(得分:4)

使用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"] 

答案 2 :(得分:2)

这取决于你想要分割字符串的方式。如果您对使用单个空间感到满意,那么可以使用:

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

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

答案 3 :(得分:1)

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方法去除标点符号。

答案 4 :(得分:1)

功能样式版

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

使用max

的另一种解决方案
str.split(' ').max { |a, b| a.length <=> b.length }

答案 5 :(得分:1)

sort_by!和reverse

def longest_word(sentence)
  longw = sentence.split(" ")
  longw.sort_by!(&:length).reverse!
  p longw[0]
end

longest_word("once upon a time long ago a very longword")

答案 6 :(得分:0)

如果你真的想以Ruby的方式做到这一点,那就是:

def longest(sentence)

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

end

答案 7 :(得分:0)

这是从多余的字符中去除单词

sen.gsub(/[^0-9a-z ]/i, '').split(" ").max_by(&:length)