有没有相当于javascript的Array.prototype.every方法的ruby?

时间:2015-06-24 00:13:00

标签: javascript arrays ruby

我正在寻找一种类似于javascript的Array.prototype.every方法的方法,但是在ruby中。在javascript中,它遍历数组并返回true,如果每个元素导致回调返回true。关于它的一个好处是,如果其中一个元素未通过测试,它就不会在整个数组上进行迭代。相反,它会短路并返回false。

function isBigEnough(element) {
  return element >= 10;
}
[12, 5, 8, 130, 44].every(isBigEnough);   //=> false
[12, 54, 18, 130, 44].every(isBigEnough); //=> true

我知道我可以通过while循环等低级迭代器获得类似的效果。

def isBigEnough(arr)
  i = 0
  result = true
  while i < arr.length
    if arr[i] >= 10
      i++
    else
      i = arr.length
      result = false
    end
  end
  return result
end
is_big_enough([12, 5, 8, 130, 44]) #=> false
is_big_enough([12, 54, 18, 130, 44]) #=> true

但我认为红宝石会有一些东西。任何人都知道如何获得同样的效果?

2 个答案:

答案 0 :(得分:3)

我会使用all?

my_array.all? { |element| element >= 10 }

传入block代码,该代码在功能上等同于在JavaScript中传递函数。

答案 1 :(得分:0)

select [Parent #],
    [Child #],
   [Parent Name], 
   [Child Name]
from
(
select *,
ROW_NUMBER() OVER(PARTITION BY [Child #] ORDER BY [Child #]) AS rn
from mytable
) tab
where rn  = 1;
  

Enumerable#all? is_big_enough = -> element { element >= 10 } [12, 5, 8, 130, 44].all?(&is_big_enough) # => false [12, 54, 18, 130, 44].all?(&is_big_enough) # => true [{ |obj| block } ]true

     

将集合的每个元素传递给给定的块。如果块永远不会返回falsetrue,则该方法返回false。如果没有给出块,Ruby会添加一个nil的隐式块,当{1}}或{{1}没有任何集合成员时,{ |obj| obj }将导致all?返回true }。

false