Arrays Ruby:从数组中删除变量

Arrays Ruby:从数组中删除变量,arrays,ruby,variables,methods,Arrays,Ruby,Variables,Methods,我是新手。提前谢谢 这里的想法类似于从一副牌中随机抽取一张牌。我想从数组中永久提取一个随机数 我的代码给了我一个关于“删除”的错误方法。[1,2,3,4,5,6,7,8]:数组的未定义方法delete!' (回复):6:ininitialize'”。但据我所知,这里可能有六个错误 我已经对下面的代码进行了注释,所以你可以遵循我的业余思维过程。我相信有一些很棒的方法可以用两行我还没有经历过的代码来完成这一切。你能帮忙吗 array = [1, 2, 3, 4, 5, 6, 7, 8] # Crea

我是新手。提前谢谢

这里的想法类似于从一副牌中随机抽取一张牌。我想从数组中永久提取一个随机数

我的代码给了我一个关于“删除”的错误方法。[1,2,3,4,5,6,7,8]:数组的未定义方法
delete!'
(回复):6:in
initialize'”。但据我所知,这里可能有六个错误

我已经对下面的代码进行了注释,所以你可以遵循我的业余思维过程。我相信有一些很棒的方法可以用两行我还没有经历过的代码来完成这一切。你能帮忙吗

array = [1, 2, 3, 4, 5, 6, 7, 8]
# Create array of sequential numbers

high_number = array.length - 1
# Determining length of array for next line, offset by 1 for array

rand_number = rand(0..high_number)
# Create a random number from 0 (first array position) through high num

draw = array[rand_number]
# drawing that position number from array (passed on to another action)

array.delete!(rand_number)
# make sure the next time I loop through this array that number can't be drawn again

没有
删除数组的方法。也许你的意思是

删除(obj)→ 项目或无 从self中删除等于obj的所有项目

返回上次删除的项,如果未找到匹配项,则返回nil

如果给出了可选代码块,如果找不到该项,则返回该块的结果。(要删除nil元素并获得信息性返回值,请使用#compact!)

或者,从你使用它的方式来看,也许你真正的意思是:

在(索引)处删除→ obj或nil 删除指定索引处的元素,返回该元素,或 如果索引超出范围,则为零

另请参见#切片


您可能还对数组上的一些其他方法感兴趣,例如
shuffle
sample
pop
。完整的文档可在上获取。

如果您删除该项目只是为了确保不再绘制该项目,则 有可能吗

ar = (1..8).to_a
p ar.sample(3) # => [1, 8, 6]

数组保持不变。

正如Ajedi32所说,查看
shuffle
pop
并了解各种数组方法

然后,您可以将代码重写为:

array = (1..8).to_a
# Create array of sequential numbers

draw = array.shuffle!.pop
# randomize order of array in place, remove and return last element

非常感谢。这使我遇到了一个新的错误,但解决了一个问题。:)
ar = (1..8).to_a
p ar.sample(3) # => [1, 8, 6]
array = (1..8).to_a
# Create array of sequential numbers

draw = array.shuffle!.pop
# randomize order of array in place, remove and return last element
>> a = (1..8).to_a
=> [1, 2, 3, 4, 5, 6, 7, 8]
>> b = a.delete(a.sample)
=> 6
>> a
=> [1, 2, 3, 4, 5, 7, 8]
>> b
=> 6