Ruby - 计算数组,加法和打印中相同的元素

时间:2013-11-30 14:00:03

标签: ruby

我将此输入.txt文件加载到数组中,因此它出现如下:

class Note
  def initialize(a, b)
    @a = a
    @b = b
  end
end

input = File.open("DATA", "r")
input.each do |line|
  l = line.split(',')
  arr << Note.new(l[0], l[1])
end

我想计算并输出到另一个.txt文件,每个内部数组等于另一个内部数组的次数,例如[500, 2, x],其中x[500, 2]数组在arr中表示的时间。

input.txt示例

10000, 150
00500, 10
08000, 171
00045, 92
00045, 93
00045, 92
00045, 93

预期产出

10000, 150, 1
00500, 10, 1
08000, 171, 1
00045, 92, 2
00045, 93, 2

提前致谢。

2 个答案:

答案 0 :(得分:1)

这个怎么样:

arr.uniq.map {|el| [*el, arr.count(el)] }

对于数组的每个唯一元素,计算它在那里的次数,并使用该元素及其计数创建一个新数组。

示例:

arr = [[1,2], [5,5], [5,5], [8,7], [1,2], [5,5]]
#=> [[1, 2, 2], [5, 5, 3], [8, 7, 1]]

答案 1 :(得分:1)

这就是你要找的东西:

arr = [[5000, 52],[99422, 1],[5000, 52],[325, 63]]
arr.group_by{|a| a }.map{|k,v| [*k,v.size]}
# => [[5000, 52, 2], [99422, 1, 1], [325, 63, 1]]

修改

ar = File.readlines("/home/kirti/Ruby/input.txt").map{|s| s.scan(/\w+/) }
ar.group_by{|a| a }.map{|k,v| [*k,v.size]}
# => [["10000", "150", 1],
#     ["00500", "10", 1],
#     ["08000", "171", 1],
#     ["00045", "92", 2],
#     ["00045", "93", 2]]