如何按照添加到哈希的顺序打印哈希的元素

Jac*_*son 4 perl hash

如何按照添加到散列的顺序打印散列的键/值对.

例如:

%hash = ("a", "1", "b", "2", "c", "3");
while (($key, $value) = each %hash) {
   print "$key", "$value\n";
}
Run Code Online (Sandbox Code Playgroud)

以上结果如下:

c3
a1
b2
Run Code Online (Sandbox Code Playgroud)

我正在寻找一种方法来打印以下内容:

a1
b2
c3
Run Code Online (Sandbox Code Playgroud)

提前致谢!

ike*_*ami 8

如何按哈希中出现的顺序打印哈希的键/值对.

您使用的代码正是如此.c3,a1,b2是元素在那时出现在哈希中的顺序.

您实际想要按照插入顺序打印它们.为此,您需要跟踪插入元素的顺序,或者您必须使用除散列之外的其他内容,例如前面提到的Tie :: IxHashTie :: Hash :: Indexed.

  • @mpapec,我从来都不需要.我总是能够使用数组或数组+哈希组合. (3认同)

Mat*_*teo 5

哈希不是有序的.您需要选择其他数据结构.


Сух*_*й27 5

您需要Tie::IxHash用于订购哈希的模块,

use Tie::IxHash;

tie(my %hash, 'Tie::IxHash');
%hash = ("a", "1", "b", "2", "c", "3");

while (my ($key, $value) = each %hash) {
  print "$key", "$value\n";
}
Run Code Online (Sandbox Code Playgroud)


DJG*_*DJG 5

哈希通常是无序的.您可以改为使用有序哈希.从CPAN 尝试Tie :: Hash :: Indexed.

从文档:

  use Tie::Hash::Indexed;

  tie my %hash, 'Tie::Hash::Indexed';

  %hash = ( I => 1, n => 2, d => 3, e => 4 );
  $hash{x} = 5;

  print keys %hash, "\n";    # prints 'Index'
  print values %hash, "\n";  # prints '12345'
Run Code Online (Sandbox Code Playgroud)