使用块查找匹配条件的值

时间:2011-05-14 15:20:47

标签: ruby block

对我来说这很有道理:

triple = dice.collect {|value| if (dice.count(value) >= 3)} ---> Syntax error

OR

triple = dice.collect {|value| dice.count(value) >= 3} ----> Array of true/false

我想要数字的值,而不是dice.count()的真或假。我知道必须是一种简单的方法。

3 个答案:

答案 0 :(得分:5)

听起来你想要Array#select,而不是Array#collect(也称为Array#map)。

collect/map将获取每个value并将块的结果放入数组中。这就是你看到一个真/假数组的原因。

select将获取每个value,如果块的计算结果为true,则将其作为数组的成员返回:

triple = dice.select{ |value| dice.count(value) >= 3 }

答案 1 :(得分:1)

您的块需要在最终数组中返回您想要的任何内容。

triple = dice.collect {|value| 
  if dice.count(value) >= 3
    dice.count(value)
  end
}

请注意,这将返回nil元素< 3(虽然您可以添加else以返回0或其他内容)。如果您只想要符合查询的元素,则需要使用dice.select()

答案 2 :(得分:1)

至于您的第一个代码段,

triple = dice.collect {|value| THE_CODE_BLOCK_STARTS_HERE }

因此,if (dice.count(value) >= 3)是一个不完整的if语句。这就是你得到语法错误的原因。