【发布时间】:2017-11-05 15:05:33
【问题描述】:
我有一个哈希数组,如下所示:
items = [ {"id" => 1, "cost" => '2.00'},
{"id" => 2, "cost" => '6.00'},
{"id" => 1, "cost" => '2.00'},
{"id" => 1, "cost" => '2.00'},
{"id" => 1, "cost" => '2.00'} ]
我想更新cost to '8.00',其中id = 1。我已尝试使用如下的each 方法,该方法确实有效,但我想知道是否有另一种更有效的更新值的方法?
items.each { |h| h["cost"] = "8.00" if h["id"] == 1 }
【问题讨论】:
-
在最坏的情况下搜索数组中的记录需要
n(n=> 数组中的元素数)步骤。一种更有效的方法是使用不同的数据结构——例如一个哈希值,其中 id 是键,值是成本。只需一步即可找到要更新的元素。使用散列而不是带有嵌套散列的数组是一种选择吗? -
谢谢,@spickermann 正如你所说,我想避免使用
N + 1 each方法,我想知道任何应该有效的方法。所以请随意使用哈希 -
您的数据结构中有重复项。你需要它们吗?如果是,为什么要更新所有相同的成本呢?每个ID只有一个条目就足够了吗?还是一个条目存储条目数和一个成本?
-
是的,我需要副本,因为我想计算总成本。此外,这些物品基本上就像一个购物车。所以我想计算总成本。
-
“我尝试了每种方法” - 请展示你的尝试。