-1

我有一个带有<pb n="4-DIGIT-NUMBER" ... />. 这个数字在某些情况下是相同的,所以我想消除歧义,到目前为止,但现在计数有问题(我有正确的方法吗?=> 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)。如果我可以将数组拆分为其子数组,将它们全部作为普通数组产生,那会好吗?

提前致谢!勒内·T。

4

1 回答 1

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"]]
于 2012-12-17T10:29:31.797 回答