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