Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 使用inject方法查找最长的单词_Ruby - Fatal编程技术网

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?