在 Ruby 中从 X.times 返回数组的简洁方法

发布于 2024-12-07 20:19:32 字数 261 浏览 0 评论 0原文

我经常想对数组执行 X 次操作,然后返回该数字以外的结果。我通常编写的代码如下:

  def other_participants
    output =[]
    NUMBER_COMPARED.times do
      output << Participant.new(all_friends.shuffle.pop, self)
    end
    output
  end

有没有更干净的方法来做到这一点?

I often want to perform an action on an array X times then return a result other than that number. The code I usually write is the following:

  def other_participants
    output =[]
    NUMBER_COMPARED.times do
      output << Participant.new(all_friends.shuffle.pop, self)
    end
    output
  end

Is there a cleaner way to do this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

旧竹 2024-12-14 20:19:32

听起来你可以使用 map/collect (它们是 Enumerable 的同义词)。它返回一个数组,其内容是通过映射/收集的每次迭代的返回。

def other_participants
  NUMBER_COMPARED.times.collect do
    Participant.new(all_friends.shuffle.pop, self)
  end
end

您不需要另一个变量或显式的 return 语句。

http://www.ruby-doc.org/core/Enumerable .html#method-i-collect

sounds like you could use map/collect (they are synonyms on Enumerable). it returns an array with the contents being the return of each iteration through the map/collect.

def other_participants
  NUMBER_COMPARED.times.collect do
    Participant.new(all_friends.shuffle.pop, self)
  end
end

You don't need another variable or an explicit return statement.

http://www.ruby-doc.org/core/Enumerable.html#method-i-collect

等待我真够勒 2024-12-14 20:19:32

您可以使用 each_with_object

def other_participants
  NUMBER_COMPARED.times.each_with_object([]) do |i, output|
    output << Participant.new(all_friends.shuffle.pop, self)
  end
end

来自 fine手册

each_with_object(obj) {|(*args), memo_obj| ... } → obj
each_with_object(obj) → an_enumerator

使用给定的任意对象迭代每个元素的给定块,并返回最初给定的对象。
如果没有给出块,则返回一个枚举器。

You could use each_with_object:

def other_participants
  NUMBER_COMPARED.times.each_with_object([]) do |i, output|
    output << Participant.new(all_friends.shuffle.pop, self)
  end
end

From the fine manual:

each_with_object(obj) {|(*args), memo_obj| ... } → obj
each_with_object(obj) → an_enumerator

Iterates the given block for each element with an arbitrary object given, and returns the initially given object.
If no block is given, returns an enumerator.

关于从前 2024-12-14 20:19:32

我认为这样的东西是最好的

def other_participants
  shuffled_friends = all_friends.shuffle
  Array.new(NUMBER_COMPARED) { Participant.new(shuffled_friends.pop, self) }
end

I thing something like this is best

def other_participants
  shuffled_friends = all_friends.shuffle
  Array.new(NUMBER_COMPARED) { Participant.new(shuffled_friends.pop, self) }
end
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文