Ruby 使用块查找与条件匹配的值
对我来说,这很有道理:Ruby 使用块查找与条件匹配的值,ruby,block,Ruby,Block,对我来说,这很有道理: triple = dice.collect {|value| if (dice.count(value) >= 3)} ---> Syntax error 或 我要的是数字的值,而不是dice.count()的真或假。我知道一定有一个简单的方法可以做到这一点。听起来像是你想要的,而不是(也称为) collect/map将获取每个值,并将块的结果放入数组中。这就是为什么你会看到一系列的真/假 select将获取每个值,如果块的计算结果为true,则将其作为数组
triple = dice.collect {|value| if (dice.count(value) >= 3)} ---> Syntax error
或
我要的是数字的值,而不是dice.count()的真或假。我知道一定有一个简单的方法可以做到这一点。听起来像是你想要的,而不是(也称为)
collect/map
将获取每个值
,并将块的结果放入数组中。这就是为什么你会看到一系列的真/假
select
将获取每个值
,如果块的计算结果为true
,则将其作为数组的一个成员返回:
triple = dice.select{ |value| dice.count(value) >= 3 }
听起来像是你想要的,不是(也被称为)
collect/map
将获取每个值
,并将块的结果放入数组中。这就是为什么你会看到一系列的真/假
select
将获取每个值
,如果块的计算结果为true
,则将其作为数组的一个成员返回:
triple = dice.select{ |value| dice.count(value) >= 3 }
您的块需要在最终数组中返回您想要的任何内容
triple = dice.collect {|value|
if dice.count(value) >= 3
dice.count(value)
end
}
请注意,对于<3的元素,这将返回
nil
(尽管您可以添加else
以返回0或其他内容)。如果只需要与查询匹配的元素,则需要使用dice.select()块需要在最终数组中返回所需的内容
triple = dice.collect {|value|
if dice.count(value) >= 3
dice.count(value)
end
}
请注意,对于<3的元素,这将返回
nil
(尽管您可以添加else
以返回0或其他内容)。如果只需要与查询匹配的元素,则需要使用dice.select()
作为第一个代码段
triple = dice.collect {|value| THE_CODE_BLOCK_STARTS_HERE }
因此,
if(dice.count(value)>=3)
是一个不完整的if
语句。这就是为什么会出现语法错误。对于第一个代码段
triple = dice.collect {|value| THE_CODE_BLOCK_STARTS_HERE }
因此,
if(dice.count(value)>=3)
是一个不完整的if
语句。这就是为什么你会出现语法错误。我想你是想在最后一行写“选择”。哎呀,是的,我是说select
。我想你是想在最后一行写“选择”。哎呀,是的,我是说select
。遗憾的是,骰子的成本。count(值)是不确定的,可能很昂贵,在你的块中,它会被调用两次。只需使用“select”而不是“collect”。事实上,select更好,但前提是不需要数组包含nil
或其他确定值。在他的情况下,他没有,但可能有。悲哀的是,dice.count(value)的成本是不确定的,可能会很昂贵,在您的块中,它会被调用两次。只需使用“select”而不是“collect”。事实上,select更好,但前提是不需要数组包含nil
或其他确定值。在他的情况下,他没有,但可以。