Ruby:迭代子数组并计算项目;将计数写回元素

时间:2012-12-17 10:18:23

标签: ruby count loops multidimensional-array arrays

我有一个<pb n="4-DIGIT-NUMBER" ... />的XML文件。这个数字在某些情况下是相同的,所以我想消除歧义,到目前为止,但现在计数问题(我有正确的方法吗?=&gt; 3))

1)将所有数字读入数组,产生一个非常长的列表:

Dir.chdir("./Tustep/luxneu")
sammel = []
open("lp42tags.txt").each do |x|
  if x =~ /<pb n="(\d\d\d\d)/
  sammel << $1
  end
end

2)找到重复的数字并将它们放入子阵列

dupl_groups = sammel.select{|i| sammel.grep(i).size > 1}.group_by{|x| x}.values
p dupl_groups
# (much shorter example)=> [["0119", "0119"], ["0147", "0147"], ["0156", "0156", "0156"]]

3)现在我想我可以以某种方式计算每个子阵列的元素并将它们放回(或复制到......)。我想要,例如[[“0119:1”,“0119:2”],[...],[“0156:1”,“0156:2”,“0156:3”],也许是这样(但只有搞笑的循环几乎无穷无尽的数字计算...:/)

dupl_counted = []
dupl_groups.each do |outer|
  count = 1
  dupl_groups do |inner|
    #puts inner.inspect
    inner_new = inner.to_s.sub(/(.+)/, "\\1:#{count}")
    dupl_counted << inner_new
    count += count
  end
end

严重缺陷......?也许用东西而不是“each_with_index”?此外,我需要用于以有意义的块计数的组(切片3左右是不可接受的,因为数字重复范围从2-6)。如果我可以在其子阵列中分割数组,将它们全部作为普通数组,那会不会很好?

提前致谢! RenéT。

1 个答案:

答案 0 :(得分:0)

这应该只是map的嵌套应用程序 - 一次到外部组,然后到内部的每个元素:

dupl_groups.map do |gp| 
  gp.map.with_index {|el, ix| el + ":#{ix+1}"}
end
# => [["0119:1", "0119:2"], ["0147:1", "0147:2"], ["0156:1", "0156:2", "0156:3"]]