新手在这里。提前谢谢。
这里的想法类似于从一副纸牌中随意拉一张牌。我想永久地从数组中拉出一个随机数。
我的代码给了我一个关于删除的错误!'方法。 "未定义的方法delete!' for [1, 2, 3, 4, 5, 6, 7, 8]:Array
(repl):6:in
初始化'"。但据我所知,这里可能有六个错误。
我已经对下面的代码进行了评论,因此您可以按照我的业余思维过程进行操作。我确定有一些很棒的方法可以用两行代码来编写这些代码,这些代码我还没有经历过。你能帮忙吗?
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
答案 0 :(得分:2)
数组没有Date AM JL
25/06/2015 2500 300
24/06/2015 2300 1300
方法。也许你的意思是delete
?
删除(obj)→item或nil
从self中删除所有等于obj的项目。
返回上次删除的项目,如果找不到匹配的项目,则返回nil。
如果给出了可选代码块,如果找不到该项,则返回该块的结果。 (要删除nil元素并获取信息性返回值,请使用#compact!)
delete!
或者,从您使用它的方式来判断,也许您真的意味着delete_at
:
delete_at(index)→obj或nil
删除指定索引处的元素,返回该元素或 如果指数超出范围,则为零。
另见#slice!
a = [ "a", "b", "b", "b", "c" ] a.delete("b") #=> "b" a #=> ["a", "c"] a.delete("z") #=> nil a.delete("z") { "not found" } #=> "not found"
您可能也有兴趣查看有关Array的其他一些方法,例如a = ["ant", "bat", "cat", "dog"]
a.delete_at(2) #=> "cat"
a #=> ["ant", "bat", "dog"]
a.delete_at(99) #=> nil
,shuffle
和sample
。完整文档可在ruby-doc.org上找到。
答案 1 :(得分:0)
答案 2 :(得分:0)
正如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
答案 3 :(得分:0)
>> 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