Ruby-如何从数组中弹出特定元素

时间:2018-11-17 21:23:03

标签: ruby

在Ruby中从数组中弹出特定元素的最简单方法是什么,类似于.p的.delete方法

a.delete(element)

不是弹出第一个/最后一个元素或使用.slice?

要更具体一点:例如,我可以做

case names.sample when "John", "Dave", "Sam"
  a.delete(names.sample)
end

a中作为示例出现时,从names中删除其中一个名称

但是,我打算使用多个样本,并且使用a.delete()将一次删除所有元素,而不是像shuffle!.pop那样连续弹出元素的结果那样连续删除,因此名称在选择相同名称作为a

之后,不能再从name.sample中选择作为样本

我想知道Ruby中最简单的方法是连续地弹出这些元素,或者在这种情况下是否有可能。

2 个答案:

答案 0 :(得分:2)

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"]

在解决您的最后一条评论时,您可以使用include?indexdelete_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?indexdelete_at与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"]

另请参阅the documentation for Array

答案 1 :(得分:1)

  

[..]打算使用多个样本,并且使用a.delete()将一次删除所有元素,而不是像shuffle!.pop连续弹出元素那样从name.sample产生的结果那样连续删除,因此在选择与names = ["John", "Dave", "Sam"] names.size.times { p names.delete(names.sample) } #=> "Sam" #=> "John" #=> "Dave" [..]

相同的名称后,无法再从中选择名称作为样本

也许您正在寻找类似的东西?

public void button1(View view)
{
    sendData("http://xx.xx.xx.xx/index2.php?field2=1");
}
public void button0(View view)
{
    sendData("http://xx.xx.xx.xx/index2.php?field2=0");
}