请帮我写“我的”;洗牌;ruby中的代码
这就是问题所在 洗牌。既然你已经完成了任务 新的排序算法,那么 对面?编写一个shuffle方法 获取一个数组并返回一个 洗牌版。和往常一样,你会 想测试一下,但测试一下这个 更棘手的是:你如何测试以使 你肯定得到了一个完美的答案 洗牌你会怎么说 完美的洗牌是什么?现在测试 它 这是我的密码答案:请帮我写“我的”;洗牌;ruby中的代码,ruby,shuffle,Ruby,Shuffle,这就是问题所在 洗牌。既然你已经完成了任务 新的排序算法,那么 对面?编写一个shuffle方法 获取一个数组并返回一个 洗牌版。和往常一样,你会 想测试一下,但测试一下这个 更棘手的是:你如何测试以使 你肯定得到了一个完美的答案 洗牌你会怎么说 完美的洗牌是什么?现在测试 它 这是我的密码答案: def shuffle arr x = arr.length while x != 0 new_arr = [] rand_arr = (rand(x)) x-
def shuffle arr
x = arr.length
while x != 0
new_arr = []
rand_arr = (rand(x))
x--
new_arr.push rand_arr
arr.pop rand_arr
end
new_arr
end
puts (shuffle ([1,2,3]))
我的错误是什么?为什么这段代码不起作用?您的索引与值混淆了。当您执行
new\u-arr.push rand\u-arr
时,您将在new\u-arr
的末尾添加任何随机索引作为值。你想做的是new\u arr.push arr[rand\u arr]
,其中arr[rand\u arr]
是arr
中索引rand\u arr
的值。你的索引与值混淆了。当您执行new\u-arr.push rand\u-arr
时,您将在new\u-arr
的末尾添加任何随机索引作为值。您想做的是new\u arr.push arr[rand\u arr]
,其中arr[rand\u arr]
是arr
中索引rand\u arr
处的值,除了其他一些小错误之外,您似乎不明白pop和push在做什么(从数组末尾获取或添加一些项)
您可能正在尝试写以下内容
def shuffle arr
x = arr.length
new_arr = []
while x != 0
randpos = rand(x)
x = x-1
item = arr[randpos]
new_arr.push item
arr[randpos] = arr[x]
arr.pop
end
new_arr
end
puts (shuffle ([1,2,3]))
除了其他一些小错误之外,您似乎不了解pop和push正在做什么(从数组末尾获取或添加一些项) 您可能正在尝试写以下内容
def shuffle arr
x = arr.length
new_arr = []
while x != 0
randpos = rand(x)
x = x-1
item = arr[randpos]
new_arr.push item
arr[randpos] = arr[x]
arr.pop
end
new_arr
end
puts (shuffle ([1,2,3]))
这里有一个更为红润的版本:
class Array
def shuffle!
size.downto(1) { |n| push delete_at(rand(n)) }
self
end
end
puts [1,2,3].shuffle!
这里有一个更为红润的版本:
class Array
def shuffle!
size.downto(1) { |n| push delete_at(rand(n)) }
self
end
end
puts [1,2,3].shuffle!
以下是一种更简洁的写作方式:
def shuffle(arr)
new_arr = []
while (arr.any?) do
new_arr << arr.delete_at(rand(arr.length))
end
new_arr
end
以下是一种更简洁的写作方式:
def shuffle(arr)
new_arr = []
while (arr.any?) do
new_arr << arr.delete_at(rand(arr.length))
end
new_arr
end
Ruby 1.8.7和1.9.2有一个内置的数组洗牌方法。Ruby 1.8.7和1.9.2有一个内置的数组洗牌方法。Mark Thomas答案的变体。由于删除操作的性能,对于大数组,他的算法可能会非常慢
class Array
def shuffle!
size.downto(1) do |n|
index=rand(n)
# swap elements at index and the end
self[index], self[size-1] = self[size-1],self[index]
end
self
end
end
puts [1,2,3].shuffle!
此算法为O(大小),而Mark的算法为O(大小^2)。在我的计算机上,马克的答案需要400秒才能在我的机器上洗牌1000000个元素的数组,而我的方法需要0.5秒。马克·托马斯答案的变体。由于删除操作的性能,对于大数组,他的算法可能会非常慢
class Array
def shuffle!
size.downto(1) do |n|
index=rand(n)
# swap elements at index and the end
self[index], self[size-1] = self[size-1],self[index]
end
self
end
end
puts [1,2,3].shuffle!
此算法为O(大小),而Mark的算法为O(大小^2)。在我的电脑上,马克的答案在我的机器上洗牌1000000个元素的数组需要400秒,而我的方法需要0.5秒。为什么把
rand(x)
放在括号里?什么意思不起作用?回答不好,没有回答,错误信息?作业?面试筛选?rand.rb:7:语法错误,意外的提示符,需要关键字\u end您至少可以发布运行的有效代码…为什么要将rand(x)
放在括号中?什么意思不起作用?回答不好,没有回答,错误信息?作业?面试筛选?rand.rb:7:语法错误,意外的tIDENTIFIER,需要关键字\u end您至少可以发布运行的有效代码…eror是:rand.rb:7:语法错误,意外的tIDENTIFIER,需要关键字\u end new\u arr.push arr[rand\u arr]代码是:def shuffle arr x=arr.length while x!=0 new_arr=[]rand_arr=(rand(x))x--new_arr.push arr[rand_arr]arr.pop arr[rand_arr]end new_arr end put(shuffle([1,2,3])这是编译错误,只需将x--替换为x=x-1即可修复它。但这还不足以让代码正常工作,还有一些逻辑错误。@gal我建议您在尝试进一步操作之前先学习Ruby。请看减量和增量部分。eror为:rand.rb:7:语法错误,意外的tIDENTIFIER,应为关键字\u end new\u arr.push arr[rand\u arr]代码为:def shuffle arr x=arr.length while x!=0 new_arr=[]rand_arr=(rand(x))x--new_arr.push arr[rand_arr]arr.pop arr[rand_arr]end new_arr end put(shuffle([1,2,3])这是编译错误,只需将x--替换为x=x-1即可修复它。但这还不足以让代码正常工作,还有一些逻辑错误。@gal我建议您在进一步学习之前先学习Ruby。请看减量和增量部分是的,但OP需要将其作为某种赋值来编写。是的,但OP需要将其作为某种赋值来编写。