我正在尝试创建名为longest_word
的方法,该方法将一个句子作为参数,该函数将返回句子中最长的单词。
我的代码是:
def longest_word(str)
words = str.split(' ')
longest_str = []
return longest_str.max
end
答案 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)