如何从Ruby中的Set中弹出一个元素?

时间:2015-10-10 04:52:11

标签: ruby set

在Python中,我可以执行a_set.pop()并从集合中删除元素并将其捕获到变量中。有没有办法用Ruby中的集合做同样的事情?

4 个答案:

答案 0 :(得分:1)

研究这样一个问题的最好方法是查看文档。 Google搜索' ruby​​ set'将帮助您找到doc for the ruby Set class。然后,您可以查看所有可用的实例方法。

正如您所看到的,Set是"无序值的集合,没有重复。"由于它是无序的,因此它不是为了获取集合中特定位置的值而设计的,包括最后一个值。

您可以使用#to_a转换为数组,然后在数组上使用#pop,但由于无法保证Set的顺序,您可能不会得到您所拥有的值。期待。

编辑:有趣的是,Python中的pop删除并返回"任意元素。"我现在看到你正在寻找的东西。虽然这不是Ruby集中的内置方法,但我想你可以使用Array#sample来实现它,它从数组中抓取一个随机元素,然后从Set中删除它:

class Set
  def pop
    el = self.to_a.sample
    self.delete(el)
    el
  end
end

答案 1 :(得分:1)

pop应始终意味着从堆栈中弹出。堆栈是后进先出的。对我而言意味着

1)应订购该套装 2)添加的最后一个元素是获得popped

的元素

我的实施将是:

class Set
  def pop
    element = to_a.last
    delete(element)
    element
  end
end

答案 2 :(得分:1)

如果您只想要返回该组的任何元素,这将有效。

class Set
  def pop
    popped = first
    delete(first)
    popped
  end
end

答案 3 :(得分:0)

Ruby Set避免了pop方法,但你可以这样做:

class Set
  def pop
    temp = self.to_a.pop
    self.delete(temp)
    temp
  end
end

s1 = Set.new [1, 2]
=> #<Set: {1, 2}>
s1.pop
=> 2
s1
=> #<Set: {1}>