Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 数组名称存储在数组中,正在推送到数组-未按预期工作_Arrays_Ruby_Push - Fatal编程技术网

Arrays 数组名称存储在数组中,正在推送到数组-未按预期工作

Arrays 数组名称存储在数组中,正在推送到数组-未按预期工作,arrays,ruby,push,Arrays,Ruby,Push,这是实际的代码。我试图简化,但我想我一定遗漏了什么 我正在做一个棋盘游戏。我想要的是 @board = {1=>0, 2=>0, 3=>0, 4=>0, 5=>0, 6=>0, 7=>0, 8=>"b", 9=>"r", 10=>"u", 11=>"c", 12=>0, 13=>0, 14=>"d", 15=>"h", 16=>"s", 17=>"l", 18=>0, 19=>0,

这是实际的代码。我试图简化,但我想我一定遗漏了什么

我正在做一个棋盘游戏。我想要的是

@board = {1=>0, 2=>0, 3=>0, 4=>0, 5=>0, 6=>0, 7=>0, 8=>"b", 9=>"r", 10=>"u", 11=>"c", 12=>0, 13=>0, 14=>"d", 15=>"h", 16=>"s", 17=>"l", 18=>0, 19=>0, 20=>"o", 21=>"i", 22=>"l", 23=>"b", 24=>0, 25=>0, 26=>"g", 27=>"t", 28=>"f", 29=>"e", 30=>0, 31=>0, 32=>0, 33=>0, 34=>0, 35=>0, 36=>0}
@words = {"shift"=>[16, 15, 21, 28, 27], "bell"=>[23, 29, 22, 17], "curb"=>[11, 10, 9, 8], "dog"=>[14, 20, 26]}

@col1 = [8, 14, 20, 26]
@col2 = [9, 15, 21, 27]
@col3 = [10, 16, 22, 28]
@col4 = [11, 17, 23, 29]

@rcol1 = Array.new
@rcol2 = Array.new
@rcol3 = Array.new
@rcol4 = Array.new

@cols = [@col1, @col2, @col3, @col4]
@rcols0 = [@rcol1, @rcol2, @rcol3, @rcol4]

out = @words["dog"]

 out.each do |remove|
  @board[remove] = 100
 end

def colclone
  nums = 0
  @rcols0.each do |fixy|
    a = @cols[nums]
    a.each do |stick|
      fixy[nums].push @board[stick]
    end
    nums += 1
  end
end
我得到的是我的引用数组中的结果

--> @rcol1 = [0, 1, 2, 3]

任何帮助都将不胜感激

您的解决方案似乎有效:

--> @rcols0 = [[0, 1, 2, 3], ...]

我想这就是你想要的:

array1 = [1,2,3]
 => [1, 2, 3] 

array2 = [4,5,6]
 => [4, 5, 6] 

names = [array1, array2]
 => [[1, 2, 3], [4, 5, 6]] 

names.each do |update|
  update.push 8
  update.push 9
end
 => [[1, 2, 3, 8, 9], [4, 5, 6, 8, 9]] 

array1
 => [1, 2, 3, 8, 9] 

array2
 => [4, 5, 6, 8, 9] 
以上各项的输出为:

array1 = [0, 1, 2]
array2 = [10, 11, 12]
array3 = [20, 21, 22]

names = [array1, array2, array3]

names.each do |array|
    i = array[array.length-1] + 1
    array.push(i,i+1)
end

p array1
p array2
p array3
p names

修改和/或扩展代码以满足您的需要。

关于代码的工作原理,您的想法或词汇错误<代码>名称不存储数组的名称<代码>名称存储对阵列对象的引用。他们的名字不重要

[0, 1, 2, 3, 4]      #array1
[10, 11, 12 ,13, 14] #array2       
[20, 21, 22, 23, 24] #array3
[[0, 1, 2, 3, 4], [10, 11, 12, 13, 14], [20, 21, 22, 23, 24]] #names array
您的代码运行良好

array1 = [0, 1, 2]
array2 = [10,20,30]
names = [array1, array2]

# names[1] contains a reference to array2
# So this is the same as array2[2]
puts names[1][2]   # 30

是否要将名称数组中的所有数组元素都推送到array1?最好有一个有效的示例,而不是
,尤其是在不太困难的情况下。只需定义(sic)
array2=[5,6,7]
names=[array1,array2]
。我看你的代码没有问题。棋盘游戏有4x4网格。当你找到一个单词时,字母消失,其他字母“落下”以填补任何空白。因此,董事会有四列。在这次测试中,我们要替换狗。狗的字母将替换为100。100的所有实例都将被删除(通过稍后的且不包含的方法)。colclone会为每一列创建临时副本,但它会破坏我的引用数组。答案在没有IRB提示的情况下更容易阅读(并且可以根据需要剪切和粘贴)。@CarySwoveland,你是如何做到的?我真的很想学这个把戏。我所做的就是
cat~/.irb_history
。粘贴到SO答案框后,在发布之前,只需编辑掉混乱的部分。现在,只需单击edit.OK!我想我已经解决了我的问题。有一次,我的@rcol1归零。后来,我检查了@rcols0,看到它(正确地)返回的不是我输入的值,而是每个数组中的值(@rcol1,等等)。我把它误认为价值观走错了地方。我的错!编码第三课,问题可能已经不在一秒钟前的位置了。
names.each do |update|
  update.push 3
  update.push 4
end

puts array1.inspect # [0, 1, 2, 3, 4]