Ruby 使用inject方法查找最长的单词
找出最长的单词Ruby 使用inject方法查找最长的单词,ruby,Ruby,找出最长的单词 longest = %w{cat sheep bear}.inject do |memo, word| memo.length > word.length ? memo : word end 我猜memo将以值“cat”开头,因为inject没有收到任何参数。我还猜测word的第一个值将是sheep,然后是word和bear 我不了解块中正在发生的事情及其语法。如果有人能详细说明,我将不胜感激。使用inject,块应返回memo的新值 在这种情况下,将使用返回两个值中
longest = %w{cat sheep bear}.inject do |memo, word|
memo.length > word.length ? memo : word
end
我猜memo
将以值“cat”
开头,因为inject
没有收到任何参数。我还猜测word
的第一个值将是sheep
,然后是word
和bear
我不了解块中正在发生的事情及其语法。如果有人能详细说明,我将不胜感激。使用
inject
,块应返回memo
的新值
在这种情况下,将使用返回两个值中的一个:如果memo
比当前单词长,则返回memo
的现有值;如果当前单词长或长度相同,则返回word
。i、 e.这是一种在备忘录
中维护迄今为止最长单词的单词列表的方法(或在长度相同时最近看到的单词)
然后在
inject
结束时,使用inject
返回memo
的最终值,块应返回memo
的新值
在这种情况下,将使用返回两个值中的一个:如果memo
比当前单词长,则返回memo
的现有值;如果当前单词长或长度相同,则返回word
。i、 e.这是一种在备忘录
中维护迄今为止最长单词的单词列表的方法(或在长度相同时最近看到的单词)
然后在
inject
结束时返回memo
1的最终值。因此,我猜测memo将以cat的值开始,因为inject没有传递任何参数。
如果未明确指定备注的初始值,则
集合的第一个元素用作备注的初始值
2。我还猜第一个词是羊,然后下一个词是熊。
您可以使用put
检查每个阶段栏的最终赋值,但这只是inject方法的返回值:
longest = %w{ cat sheep bear }.inject do |memo, word|
puts "memo is currently #{memo}",
"word is currently #{word}",
"-----------------------"
memo.length > word.length ? memo : word
end
#memo is currently cat
#word is currently sheep
#-----------------------
#memo is currently sheep
#word is currently bear
#-----------------------
longest #=> "sheep"
另一种方式 最后,获得最长单词的另一种更红的方法:
%w{ cat sheep bear }.max_by(&:length) #=> "sheep"
1。因此,我猜测memo将以cat的值开始,因为inject没有传递任何参数。 如果未明确指定备注的初始值,则 集合的第一个元素用作备注的初始值 2。我还猜第一个词是羊,然后下一个词是熊。 您可以使用
put
检查每个阶段栏的最终赋值,但这只是inject方法的返回值:
longest = %w{ cat sheep bear }.inject do |memo, word|
puts "memo is currently #{memo}",
"word is currently #{word}",
"-----------------------"
memo.length > word.length ? memo : word
end
#memo is currently cat
#word is currently sheep
#-----------------------
#memo is currently sheep
#word is currently bear
#-----------------------
longest #=> "sheep"
另一种方式 最后,获得最长单词的另一种更红的方法:
%w{ cat sheep bear }.max_by(&:length) #=> "sheep"
啊,我明白了。我不知道这个(
?:
)操作符..现在它更有意义<代码>如果此值为真值?那么结果是这样的:否则就是这样的啊,我明白了。我不知道这个(?:
)操作符..现在它更有意义<代码>如果此值为真值?然后,结果是:否则它就是这个,我在文档中查找了max。他们使用了下面的例子:a=%w(信天翁狗马)a.max_by{x | x.length}
,我理解。如果您不介意,请您解释一下传递(&:length)
作为参数是如何工作的。我不明白&:
以及如何将其用作参数?thx@codebreeze它被调用,它所做的是将给定的符号转换为类似于proc.new{var | var.[method_name_from_symbol]}
的proc.new{var | var.length}。这是一个语法上的猴子补丁,由于它的popularity@engineersmnky请检查我的推理。是:length=Proc.new{| var | var.length}
,然后使用符号和告诉max\u by
方法不要忽略符号/Proc?我在文档中查找了max\u by
。他们使用了下面的例子:a=%w(信天翁狗马)a.max_by{x | x.length}
,我理解。如果您不介意,请您解释一下传递(&:length)
作为参数是如何工作的。我不明白&:
以及如何将其用作参数?thx@codebreeze它被调用,它所做的是将给定的符号转换为类似于proc.new{var | var.[method_name_from_symbol]}
的proc.new{var | var.length}。这是一个语法上的猴子补丁,由于它的popularity@engineersmnky请检查我的推理。是:length=Proc.new{| var | var.length}
,然后使用符号and告诉max\u方法不要忽略符号/Proc?