【发布时间】:2017-10-30 11:26:13
【问题描述】:
我的问题是要求迭代一个项目数组并删除所有其他项目,直到我到达数组的末尾,此时我应该开始向后迭代并继续删除所有其他项目,以此类推,直到只有一个项目是留在数组中。
例如:1,2,3,4,5,会变成 1,3,5,然后是 3
我知道我不应该从原始数组中删除,所以我创建了另一个数组,它只保留所有其他项目,同时减小它的大小,但我无法让它工作并最终导致无限循环。
arr=*(1..10)
s_arr=[]
until s_arr.length==1
i=0
while i<arr.length
s_arr.push(arr[i])
i+=2
end
arr=s_arr.reverse
s_arr=arr
end
谢谢。
【问题讨论】:
-
arr = *(1..10)的输出是什么?(0...arr.size).each { |index| [index, -index].each { |el| arr.delete_at el } }不工作吗? -
[1, 2, 3, 4, 5, 6, 7, 8]的输出是什么? -
你好 Sebastian 这一行 arr = *(1..10) 可以被任何数组替换,比如说 arr = [2,21,1,5,6,12,100,9,17] 之后在这个数组上运行你的代码我剩下两个元素 =>[6, 9] 我只需要一个结束。有什么想法吗?此外,您的代码中的 -index 是如何工作的?我以前从来没有用过减号。谢谢。
-
为什么要留下两个元素?您的规范说“等等来回直到数组中只剩下一个项”
-
你好 Jörg W Mittag - 我不确定我是否在关注你。我只是说,在运行 Sebastian(不是我)建议的代码后,我留下了 2 个元素,而不是只有一个(就像我需要的那样)