代码之家  ›  专栏  ›  技术社区  ›  Jason Whitehorn

Ruby对循环的枚举集合求值多少次?

  •  0
  • Jason Whitehorn  · 技术社区  · 14 年前

    在Ruby中,如果我循环遍历一个集合,Ruby将对枚举的集合求值多少次?

    具体来说,我想对一个集合进行排序,并在排序后的集合上循环。因为我不需要保存已排序集合的副本,所以我想我只需将循环写为:

    for item in @items.sort{ |a,b| b.created_at <=> a.created_at } do
        #do some stuff
    end
    

    上面的行真的只对集合进行一次排序吗?或者Ruby最终会为集合中的每个项目对其进行N次排序吗?

    3 回复  |  直到 14 年前
        1
  •  1
  •   sepp2k    14 年前

    你在打电话 sort

    除了范围差异,

    for x in xs do
      some_stuff
    end
    

    xs.each do |x|
      some_stuff
    end
    

    当然当你这样做的时候 foo.bar(baz) , foo bar 做。

        2
  •  1
  •   Jeremy    14 年前

    这相当于对整个集合排序一次,然后迭代一次。

    相当于:

    @items.sort{ |a,b| b.created_at <=> a.created_at }.each do |item|
      # do some stuff
    end
    
        3
  •  0
  •   glenn mcdonald    14 年前

    @items.sort_by {|a| a.created_at}.reverse
    

    你应该经常使用 sort_by 而不是 sort 如果可以(而且您几乎总是可以),因为它对sort key函数每项只求值一次。它可以让你写一半的比较代码!