以下代码
#!/usr/bin/ruby -w
nums = File::read("euler18nums.txt"); #opens file with number array inside.
parts = nums.split(' '); #save it into instance of an array.
t = [] #dimension one of the array of arrays.
s = [] #dimension two.
j=0 #iteration variable.
k=0 #iteration variable.
n=1 #iteration variable.
parts.collect do |i| #itterates through the array that i have my data in.
s[k] = i.to_i #converts strings to int and save into 2nd dimension.
k+=1
if k == n #number of itterations increase by one every time function is called.
t[j] = s
n+=1 #saves second dimension of array into the first,-
k=0 #-and this is where my problem is because it saves into and overwrites-
test=0 #-of the array that i have saved.
while test != n #this is a test statement to print out the array so far-
print t[test], "\n" #-every time a new array is saved into it
test+=1
end
j+=1
end
end
print t #prints out at the end, this is always just the last-
#-array printed out fifteen times
每当我将s保存到t [j]时,它会保存并覆盖到目前为止已经创建的t的所有实例,我误解了ruby数组,我假设t[5] = s
并且不会影响{{1 }或t[4]
等。有没有办法做到这一点,其中ruby只保存特定实例的数组或我需要回到t[3]
为此?
这个的txt文件是
C++
答案 0 :(得分:1)
看起来t
的每个元素都是完全相同的s
数组,最终的t
看起来像这样:
t[0] ---\
t[1] ----+--> s
t[2] ---/
执行此操作时:
t[j] = s
你所做的就是将一个数组的引用分配给t[j]
,你没有制作s
数组的副本,而你只是制作另一个数组参考它。如果s
是数组或指针,则行为与C或C ++中的行为完全相同。
我不确定您使用t[j] = s
尝试完成的任务,但您可能希望将s
的副本分配给t[j]
:
t[j] = s.dup
答案 1 :(得分:0)
问题不是“覆盖”,而是你只创建了一个二维数组(你指向s
)。因此,您正在将指向同一对象的指针写入每个t[j]
将s = []
移动到代码中您希望启动新的第二维数组的位置。
如果您想在目前的数组中保留现有数字,请执行类似
的操作s = s.clone
。 。 。将(浅)将数组的现有内容复制到新的内容,并在其上指向s
。