ruby noob:散列是快速且最适合存储的还是我应该创建一个元组?
这是一个非常简单的问题,我正在用Ruby解决,但我完全是个傻瓜,所以我想学习最正确的解决方案。我有一个包含名称和值的数据列表。我需要记住所有这些(显而易见的答案:散列)。但是,我还需要记住这些数据的顺序。所以它看起来像:ruby noob:散列是快速且最适合存储的还是我应该创建一个元组?,ruby,optimization,Ruby,Optimization,这是一个非常简单的问题,我正在用Ruby解决,但我完全是个傻瓜,所以我想学习最正确的解决方案。我有一个包含名称和值的数据列表。我需要记住所有这些(显而易见的答案:散列)。但是,我还需要记住这些数据的顺序。所以它看起来像: x=1 y=2 z=3 我在考虑制作一个由1个元素散列组成的数组: [0 => {'x' => 1}, 1 => {'y' => 2}, 2 => {'z' => 3}] 在这种情况下,哈希是最佳选择吗?有什么原因导致它们速度慢,或者
x=1
y=2
z=3
我在考虑制作一个由1个元素散列组成的数组:
[0 => {'x' => 1},
1 => {'y' => 2},
2 => {'z' => 3}]
在这种情况下,哈希是最佳选择吗?有什么原因导致它们速度慢,或者不是最优的吗?使用Ruby 1.9。散列在这里排序。使用Ruby 1.9。散列在这里排序。您可以尝试使用Ruby Facets从
ActiveSupport
或Dictionary
使用Ruby Facets进行排序。您可以尝试使用Ruby Facets从ActiveSupport
或Dictionary
进行排序。如果性能允许,关联数组可以工作。关联数组是数组的数组,每个子数组包含两个元素:
a = [
[:x, 1],
[:y, 2],
[:z, 3],
]
您可以使用assoc
按第一个元素查找子数组:
p a.assoc(:x) # [:x, 1]
p a.assoc(:x).last # 1
p a.rassoc(2) # [:y, 2]
p a.rassoc(2).first # :y
或rassoc
按最后一个元素查找子数组:
p a.assoc(:x) # [:x, 1]
p a.assoc(:x).last # 1
p a.rassoc(2) # [:y, 2]
p a.rassoc(2).first # :y
这种方法是否适用于您取决于列表的大小以及您必须搜索它的频率。在我的机器上,查找1000个元素列表中的最后一个元素大约需要100微秒
另一种方法是使用普通的无序数组(在Ruby性能允许的情况下,关联数组可以工作。关联数组是数组的数组,每个子数组包含两个元素:
a = [
[:x, 1],
[:y, 2],
[:z, 3],
]
您可以使用assoc
按第一个元素查找子数组:
p a.assoc(:x) # [:x, 1]
p a.assoc(:x).last # 1
p a.rassoc(2) # [:y, 2]
p a.rassoc(2).first # :y
或rassoc
按最后一个元素查找子数组:
p a.assoc(:x) # [:x, 1]
p a.assoc(:x).last # 1
p a.rassoc(2) # [:y, 2]
p a.rassoc(2).first # :y
这种方法是否适用于您取决于列表的大小和搜索频率。在我的机器上,查找1000个元素列表中的最后一个元素大约需要100微秒
另一种方法是使用简单、无序的(在Ruby中值得注意的是,如果Ruby 1.8是必需的,
ActiveSupport
中的OrderedHash
只会在Ruby版本小于1.9时扩展哈希,因此仅使用OrderedHash
进行良好的度量不会带来严重的性能问题。值得注意的是,如果Ruby 1.8是必需的,OrderedHash
中的ActiveSupport仅在Ruby版本低于1.9时才会扩展哈希,因此仅使用OrderedHash
进行良好的度量不会带来严重的性能问题。