gpt4 book ai didi

ruby - Array#delete_at 或 Array#slice!?以及如何查找实现

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

我正在清理大型数据文件(+1MM 逗号分隔行)。示例行可能如下所示:

@row = "123456789,11122,CustomerName,2014-01-31,2014-02-01,RemoveThisEntry,R,SKUInfo,05-MAR-14 05:50:24,SourceID,RemoveThisEntryToo,TransactionalID"

必须从中删除某些列,之后该行应如下所示:

@row = "123456789,11122,CustomerName,2014-01-31,2014-02-01,R,SKUInfo,05-MAR-14 05:50:24,SourceID,TransactionalID"

问题 1:如果我将一行数据转换为 Array,删除元素时首选哪种方法:Array#delete_atArray#slice!?我想知道哪个是更惯用的选项。性能是这里的一个考虑因素,我在 Windows 机器上。

def remove_bad_columns
ary = @row.split(",")
ary.delete_at(10)
ary.delete_at(5)
@row = ary.join(",")
end

问题 2: 我想知道其中一种方法是否是使用另一种方法实现的。我怎样才能看到这些方法是如何用 ruby​​ 构建的? (例如,for 是如何使用 each 实现的。)

最佳答案

我建议您使用 Array#values_at 而不是 delete_atslice!:

def remove_vals(str, *indices)
ary = str.split(",")
v = (0...ary.size).to_a - indices
ary.values_at(*v).join(",")
end

@row = "123456789,11122,CustomerName,2014-01-31,2014-02-01,RemoveThisEntry," +
"R,SKUInfo,05-MAR-14 05:50:24,SourceID,RemoveThisEntryToo,TransactionalID"

@row = remove_vals(@row, 5, 10)
#=> "123456789,11122,CustomerName,2014-01-31,2014-02-01,R,SKUInfo," +
# "05-MAR-14 05:50:24,SourceID,TransactionalID"

Array#values_at 与其他两种方法相比的优势在于您不必担心元素被移除的顺序。

此方法的效率与其他两种方法没有显着差异。如果@spickermann 想将它添加到他的基准测试中,他可以使用这个:

def values_at
ary = array.split(",")
v = (0...ary.size).to_a - [5,10]
@row = ary.values_at(*v).join(",")
end

关于ruby - Array#delete_at 或 Array#slice!?以及如何查找实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24306738/

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