2017-02-23 70 views
-2

我想用散列键对散列数组进行排序,我怎么能在Perl中做到这一点? 结构创建这样的:如何通过哈希名称对散列数组进行排序?

push (@{$structure[$endpoint][1]}, \%temp_hash);
%temp_hash是一个简单的散列与key->value。 现在我想作为排序依据的哈希键数组,还有在每个哈希只有一个键 - >价值......它一直在争取2小时已经和我放弃了..

+0

请出示一个完整的,但小例子演示你已经尝试过,是行不通的。 – stevieb

+0

将数组拉出(只是为了简化语法),然后'my @sorted = sort {(keys%$ a)[0] cmp(keys%$ b)[0]} @arr;'。在数组中使用单对散列似乎有点尴尬......这可能是你为什么会遇到问题的原因。你可以使用[Data :: Dumper](http://perldoc.perl.org/Data/Dumper.html)或[Data :: Dump](http://search.cpan.org/~gaas/Data-Dump -1.23/lib/Data/Dump.pm),或者类似地很容易地看到这样复杂的数据结构(它很好地打印出来)。请阅读[sort](http://perldoc.perl.org/functions/sort.html)。并请下一次显示你之前做过的事情“_gave up_” – zdim

+0

@zdim将在同一个'@ arr'上工作吗?我的意思是说,如果我这样说:1 @ arr = sort {(keys%$ a)[0] cmp(keys%$ b)[0]} @arr;'? – Adrian

回答

1

尝试

@sorted = sort { (keys %$a)[0] cmp (keys %$b)[0] } @{$structure[$endpoint][1]}; 

根据每个散列的第一个(唯一)键排序数组的元素(它们是散列引用)。如果键是数字,则使用<=>

测试代码:

%a = ('a' => 1); 
%b = ('zz' => 2); 
%c = ('g' => 3); 
@arr = (\%a, \%b, \%c); 

print "Unsorted\n"; 
for (@arr) 
{ 
    printf "%s\n",((keys %$_)[0]); 
} 

@sorted = sort { (keys %$a)[0] cmp (keys %$b)[0] } @arr; 

print "\nSorted\n"; 
for (@sorted) 
{ 
    printf "%s\n",((keys %$_)[0]); 
} 
+0

我可以将它存储在同一个阵列中吗? {$ structure [$ endpoint] [1]} = sort {(keys%$ a)[0] cmp(keys%$ b)[0]} @ {$ structure [$ endpoint] [1]}; ' – Adrian

+0

我的意思是我想保留结构并对其进行排序 – Adrian

+0

您可以将其分配回同一变量,是的。 –

相关问题