我在 Ruby 中有一个数组,我想删除数组中的前 10 位数字。
array = [1, "a", 3, "b", 2, "c", 4, "d", 5, "a", 1, "z", 7, "e", 21, "q", 30, "a", 4, "t", 7, "m", 5, 1, 2, "q", "s", "l", 13, 46, 31]
理想情况下它会返回
['a', 'b', 'c', 'd', 'a', 'z', 'e', 'q', 0, 'a', 4, t, 7, m, 5 , 1, 2, q, s, 1, 13, 46, 31]
通过删除前 10 位数字 (1,3,2,4,5,1,7,2,1,3)。
注意 21(2 和 1)和 30(3 和 0)都是 2 位数字
这是我尝试过的
digits = array.join().scan(/\d/).first(10).map{|s|s.to_i}
=> [1,3,2,4,5,1,7,2,1,3]
elements = array - digits
这是我得到的
["a", "b", "c", "d", "a", "z", "e", 21, "q", 30, "a", "t", "m", "q", "s", "l", 13, 46, 31]
现在看起来它取的是差而不是减。
我不知道从这里去哪里。现在我迷路了。感谢您的帮助。
最佳答案
删除10个号码:
10.times.each {array.delete_at(array.index(array.select{|i| i.is_a?(Integer)}.first))}
array
要删除 10 位数字:
array = [1, "a", 3, "b", 2, "c", 4, "d", 5, "a", 1, "z", 7, "e", 21, "q", 30, "a", 4, "t", 7, "m", 5, 1, 2, "q", "s", "l", 13, 46, 31]
i = 10
while (i > 0) do
x = array.select{|item| item.is_a?(Integer)}.first
if x.to_s.length > i
y = array.index(x)
array[y] = x.to_s[0, (i-1)].to_i
else
array.delete_at(array.index(x))
end
i -= x.to_s.length
end
array
关于Ruby Array - 删除前 10 位数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24809026/