gpt4 book ai didi

ruby - 在这种情况下使用 collect 会更好吗?

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

我刚开始使用 Ruby,我已经编写了一些代码来对 CSV 文件进行基本解析(Line 是一个基本类,为简洁起见省略):

class File

def each_csv
each do |line|
yield line.split(",")
end
end

end

lines = Array.new

File.open("some.csv") do |file|
file.each_csv do |csv|
lines << Line.new(:field1 => csv[0], :field2 => csv[1])
end
end

我有一种感觉,以某种方式使用 collect 比将每个 Line 推到数组中更好,但我不知道该怎么做。

任何人都可以告诉我该怎么做吗?或者它是完美的吗?

编辑:我应该明确表示我实际上不会在生产中使用这段代码,更多的是为了习惯语言的结构。不过,知道有库可以正确执行此操作仍然很有用。

最佳答案

这是一个(可能是疯狂的)想法,使用 Struct 类而不是滚动您自己的简单 POD 类。但是您想要的是拥有一个构造函数,该构造函数接受可以从文件数据生成的所有参数。

Line = Struct.new(:field1, :field2, :field3)

然后在算法的核心你想要这样的东西:

File.open("test.csv").lines.inject([]) do |result, line|
result << Line.new(line.split(",", Line.length))
end

或者更加简洁和功能化:

lines = File.open("test.csv").lines.map { |line| Line.new(line.split(",", Line.length)) }

老实说,我没有经常使用 Struct 类,但我应该使用,而且我可能会重构已经编写的内容以使用它。它允许您通过名称访问变量,例如:

Line.field1 = blah
Line.field2 = 1

ruby Struct类(class)。

因此,要实际回答您的问题,并查看上面的代码,我会说使用 collect/map 执行计算会简单得多。 map 函数和 inject 非常强大,我发现我经常使用它们。

关于ruby - 在这种情况下使用 collect 会更好吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/423678/

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