繁体   English   中英

如何对一个值的重复求和并将其添加到 Ruby 中一个键的两个值中?

How to sum repetitions of a value and add it in two values of a key in Ruby?

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我试图创建一个 hash,每个目录上每种类型的扩展都有一个键。 对于每个键,我想添加两个值:重复该扩展名的次数和具有该扩展名的所有文件的总大小。

与此类似的东西:

{".md" => {"ext_reps" => 6, "ext_size_sum" => 2350}, ".txt" => {"ext_reps" => 3, "ext_size_sum" => 1300}}

但我被困在这一步:

hash = Hash.new{|hsh,key| hsh[key] = {}}
ext_reps = 0
ext_size_sum = 0

Dir.glob("/home/computer/Desktop/**/*.*").each do |file|
  hash[File.extname(file)].store "ext_reps", ext_reps
  hash[File.extname(file)].store "ext_size_sum", ext_size_sum 
end

p hash

有了这个结果:

{".md" => {"ext_reps" => 0, "ext_size_sum" => 0}, ".txt" => {"ext_reps" => 0, "ext_size_sum" => 0}}

而且我找不到增加ext_repsext_siz_sum的方法

谢谢

2 个回复

假设绘制的文件大小如下。

files = [{ ext: 'a', size: 10 },
         { ext: 'b', size: 20 },
         { ext: 'a', size: 30 },
         { ext: 'c', size: 40 },
         { ext: 'b', size: 50 },
         { ext: 'a', size: 60 }]

您可以使用Hash#group_byHash#transform_values

files.group_by { |h| h[:ext] }.
      transform_values do |arr|
        { "ext_reps"=>arr.size, "ext_size_sum"=>arr.sum { |h| h[:size] } }
      end
        #=> {"a"=>{"ext_reps"=>3, "ext_size_sum"=>100},
        #    "b"=>{"ext_reps"=>2, "ext_size_sum"=>70},
        #    "c"=>{"ext_reps"=>1, "ext_size_sum"=>40}}

请注意,第一个计算如下。

files.group_by { |h| h[:ext] }
  #=> {"a"=>[{:ext=>"a", :size=>10}, {:ext=>"a", :size=>30},
  #          {:ext=>"a", :size=>60}],
  #    "b"=>[{:ext=>"b", :size=>20}, {:ext=>"b", :size=>50}],
  #    "c"=>[{:ext=>"c", :size=>40}]}

这不是最“类似 Ruby”的解决方案,但与您提供的示例一起,这可能是您最终最终得到的解决方案。 您的主要问题是您从未增加ext_reps值,也从未累积ext_size_sum值。

hash = {}
Dir.glob('/home/computer/Desktop/**/*.*').each do |file|
  file_extension = File.extname(file)

  if hash[file_extension].nil?
    # This is the first time this file extension has been seen, so initialize things for it.

    hash[file_extension]                 = {}
    hash[file_extension]['ext_reps']     = 0
    hash[file_extension]['ext_size_sum'] = 0
  end

  # Increment/accumulate values.
  hash[file_extension]['ext_reps']     += 1
  hash[file_extension]['ext_size_sum'] += file.size
end
1 在Java中读取两个不同的arrayList值,并将其添加到同一数组Object

我正在尝试从csv文件创建更新sql查询。 因此,为此,我尝试读取两个不同的数组列表值,一个来自CSV文件,另一个来自数据库。 我想更新我的图书数据库,但是有些字段应该保持原样。 我写了下面的代码来做到这一点,并且能够打印查询,但是我觉得我的代码效率不高。 我本可以以更有效的方式 ...

2 将两个字段的值添加到同一 model 的另一个字段中,其中一个字段是 Django-admin 中的外键

在我的Django 管理表单中,我创建了一个项目模块,其中包含三个字段 "Company"、"Category" 和 "Sub-Category" 。 这里类别和子类别是另一个“模块类别”的外来字段。 我正在尝试通过将“公司”、“类别”和“子类别”中的所有值组合为我的磁贴字段值,将第 4 个字段添加 ...

8 如何将两个值作为一个键添加到列表中? C#

下面的代码可以工作,但它会读为 key1 和 key2,因为有两个字符串值 我想实现这样的事情,所以我可以使用索引键检索两个值中的任何一个 这样做的原因是我正在尝试使用以下代码: ^ 其中 0 是实际索引键,1 是“data2”。 @编辑 我不想使用字典,因为键很可能是重复的,抱歉 ...

9 打开两个CSV文件,进行比较并将其添加到数组中

我试图从两个不同的两个CSV文件中获取信息,并将它们添加到数组中。 我基本上要做的是打开第一个文件,将其内容作为字符串放入数组。 然后是棘手的部分。 两个文件都有一个共同的ID字段,因此,只要ID匹配,就必须将其放入数组中。 我尝试以两种不同的方式执行此操作,即打开一个文件,然后在其 ...

10 两个列表(字符串),当我向其中一个添加一个值时,它被添加到另一个

我在两个不同的目录中获取文件夹并将它们的名称放入两个列表视图中,但是如果一个文件夹名称仅存在于一个目录中,我不想在另一个列表中输入任何内容,反之亦然,除非文件夹名称在两者中,那么我只想要两个列表中的名称。 这是我正在使用的代码: 两个功能:用于删除刚刚处理的文件夹名称的所有实例和排序 functio ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM