在Ruby中,从数组中弹出特定元素的最简单方法是什么,类似于。删除方法
a.delete(element)
而不是弹出第一个/最后一个元素或使用。
为了更具体:例如,我可以做
case names.sample when "John", "Dave", "Sam"
a.delete(names.sample)
end
从a
中删除其中一个名称,当它作为name
中的示例出现时
但是,我打算使用多个示例,并使用a.delete()
将一次删除所有元素,而不是像shuffle!生成的结果那样连续删除所有元素!。pop
连续弹出元素,这样在选择相同的名称作为名称后,该名称就不能再从
a
中选择为样本。示例
我想知道Ruby中连续弹出这些元素的最简单方法是什么,或者在这种情况下是否有可能。
Array
类定义了一个pop
方法。它返回并删除数组中的最后一个元素。
a = ["a", "b", "c"]
puts a.pop #=> "c"
puts a #=> ["a", "b"]
您可以选择将一个参数传递给pop
,该参数指定要弹出多少个元素。
a = ["a", "b", "c"]
puts a.pop(2) #=> ["b", "c"]
puts a #=> ["a"]
解决您的最后一个评论,您可以使用包括?
,index
和delete_at
方法来实现这一点。假设您在数组中检查“b”:
a = ["a", "b", "c"]
value_index = a.index("b") #Returns the first occurring index of "b"
has_value = a.include?("b") #Returns whether "b" is in the list
a.delete_at(a.index("b")) if has_value #Removes "b" from the list
在此示例中,has_value将是a
数组是否包含值b,而value_index将是b的第一个出现。这也将从列表中删除值"b"。
如果要删除所有出现的“b”,可以使用include代码>、
索引
和删除
处带有while循环:
a = ["a", "b", "c", "a", "b", "c"]
while a.include?("b")
a.delete_at(a.index("b"))
end
#a will now be ["a", "c", "a", "c"]
另请参阅阵列的留档。
[..] 打算使用多个示例并使用a.delete()
将一次删除所有元素,而不是像从shuffle!生成的结果那样连续删除!。pop
连续弹出元素,以便在选择相同名称作为名称后,不再从中选择该名称作为样本。示例
[…]
也许你看起来像这样?
names = ["John", "Dave", "Sam"]
names.size.times { p names.delete(names.sample) }
#=> "Sam"
#=> "John"
#=> "Dave"