Ruby Array - 删除前 10 位数字

标签 ruby arrays regex digits

我在 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/

相关文章:

c++ - 如何在Mac OS X上安装ruby-filemagic?

ruby - 参数为 Hash 时的不同解析优先级

java - 是否有理由更喜欢 Arrays 而不是 ArrayLists?

javascript - 即使条件满足后,while 循环也不会停止

字符类中的java正则表达式双反斜杠

ruby-on-rails - 如何测试 Rails 插件中的 View ?

ruby-on-rails - Rails WHERE 查询 has_many 关系不正确?

ruby - 检查数组元素是否出现在行上

带有重叠定界符的 Java Pattern.split()

正则表达式在特定位置的模式中找不到子字符串