我有一个<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。
答案 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"]]