gpt4 book ai didi

ruby - 识别特定 CSV 输出中的重复项

转载 作者:太空宇宙 更新时间:2023-11-03 18:18:17 25 4
gpt4 key购买 nike

这里是 Ruby 新手。我有一个产品 csv,其中第一个 col 是一个唯一的 SKU,第二个 col 是一个产品 ID,可以在多个产品中复制(+ 许多其他 cols,但这些是相关的)。喜欢:

SKU     | Prod ID
99 | 10384
100 | 10385
101 | 10385
102 | 10386
103 | 10386
104 | 10387

在我正在编写的脚本中,第一次使用产品 ID 将成为“父级”,并且该产品 ID 的任何后续实例都会得到不同的处理(即,不同的尺寸)。

目前我正在阅读整个 CSV,而不是像我假设的那样执行 foreach 行,因为我需要所有可用的数据来查找重复项。

问题是我不确定如何能够在第一次使用产品 ID 时识别它,然后再识别它的任何进一步使用实例。

我的第一个想法是以某种方式识别重复项(uniq?),然后创建一个新列,如果它是第一次出现则输入 1,如果之前发生过则输入 0。查看 uniq 后,我不确定如何返回主列表并标记我的 1 和 0。

有人可以指出我需要查看的类/方法的方向吗?

谢谢,利亚姆

为 John D 编辑:这给了我哈希值,但格式是 1:1 而不是 1: prod ID 的所有实例

CSV.foreach(INPUT, :headers => true , :header_converters => :symbol, :col_sep => "|",     :quote_char => "\x00") do |csv_obj|
items[csv_obj.fields[0]] = [csv_obj.fields[1]]
end

所以给;"230709"=>["88507"], "109064"=>["9019"]

最佳答案

您将 Sku 视为唯一标识符,事实上可能是这样。但是如果你把它放在头上并将 ProductID 视为唯一标识符,那么你可以构建一个 Hash,其中键是 ProductID 值是 SkuArray。然后您将能够跟踪哪些 Sku 与哪些 ProductID 相关联。

当然你会以其他方式阅读这篇文章,但最终结果将类似于:

products = 
{
10384 => [99],
10385 => [100, 101],
10386 => [102, 103],
10387 => [104]
}

下面是如何构造此哈希的示例:

#!/usr/bin/env ruby
require 'csv'

source = [
"99|110384",
"100|10385",
"101|10385",
"102|10386",
"103|10386",
"104|10387"
].join("\n")

source = CSV.parse(source, :col_sep => "|")

hh = source.inject({}) do |memo, row|
sku = row[0]
prod = row[1]

memo[prod] = [] unless memo.include?(prod)
memo[prod] << sku
memo
end

puts hh

关于ruby - 识别特定 CSV 输出中的重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22649624/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com