2016-11-22 29 views
0

我有一些随机顺序的散列和该散列的键是在一个数组中。如何根据数组中的这些键的顺序,通过键对ruby散列进行排序?

my_array = ['ONE', 'TWO', 'THREE'] 
my_hash = { 'THREE' => "this is the third", 
      'ONE' => "this is the first", 
      'TWO' => 'second' } 

如何获得这个命令的方式,其中

new_hash = { 'ONE' => "this is the first", 
      'TWO' => 'second', 
      'THREE' => "this is the third" } 
+0

为什么下令哈希?由于他们是随机访问,这并没有太大的好处。只需按'my_array'的顺序获取密钥即可。 –

+0

请阅读“[问]”和“[mcve]”和http://meta.stackoverflow.com/questions/261592/how-much-research-effort-is-expected-of-stack-overflow-users。我们希望看到您的努力,无论您是在哪里寻找解决方案,为什么这些解决方案都无济于事,或者以最低代码显示您为解决问题所写的内容以及解释为什么无法正常工作。如果没有那样看起来你要求我们为你解决问题。而且,就你所知,这个问题已经被多次提出,所以答案就在那里。 –

+0

@theTinMan是否有重新排列哈希以提高可读性的情况? –

回答

1

试试这个:

my_array = ['ONE', 'TWO', 'THREE'] 
my_hash = { 'THREE' => "this is the third", 
      'ONE' => "this is the first", 
      'TWO' => 'second' } 

my_array.zip(my_array.map {|s| my_hash[s]}).to_h 
#=> {"ONE"=>"this is the first", "TWO"=>"second", "THREE"=>"this is the third"} 
+2

希望有一个特定的顺序可能会有问题,所以最好避免。 – tadman

+1

哈希依然保持它们的插入顺序,这有点不错,但它不是必需的,也不应该被@tadman所说。养成按键排序的习惯,然后按顺序提取值; 'values_at'是我们的朋友,非常简单。对散列中的键进行排序或排序只会浪费CPU时间,因为在检索值时可以完成同样的事情。 –

+1

是的,这就是我的意思。为了得到一些任意的顺序而重建哈希是非常昂贵的,比如当你在两个其他键之间插入一个键时你必须要做。像数组一样处理它们本质上是有序的,通常是一个错误。它们只是为了一致性的缘故而订购的:以相同方式生成的两个哈希将相同。历史上情况并非如此,他们往往是随机的,不可预测的。 – tadman

相关问题