如何按照插入顺序将哈希值提取到数组中?

发布于 2024-09-12 19:27:16 字数 230 浏览 2 评论 0原文

给定 Perl 中的散列(任何散列),如何按照添加顺序从该散列中提取值并将它们放入数组中?

示例:

my %given = ( foo => '10', bar => '20', baz => '15' );

我想得到以下结果:

my @givenValues = (10, 20, 15);

Given a hash in Perl (any hash), how can I extract the values from that hash, in the order which they were added and put them in an array?

Example:

my %given = ( foo => '10', bar => '20', baz => '15' );

I want to get the following result:

my @givenValues = (10, 20, 15);

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

红玫瑰 2024-09-19 19:27:16

来自perldoc perlfaq4如何让我的哈希记住我将元素放入其中的顺序?


使用 Tie::IxHash CPAN。

使用 Tie::IxHash;
绑定我的 %myhash, 'Tie::IxHash';

for (我的 $i=0; $i<20; $i++) {

    $myhash{$i} = 2*$i;
}

我的 @keys = 键 %myhash;
# @keys = (0,1,2,3,...)

From perldoc perlfaq4: How can I make my hash remember the order I put elements into it?


Use the Tie::IxHash from CPAN.

use Tie::IxHash;
tie my %myhash, 'Tie::IxHash';

for (my $i=0; $i<20; $i++) {

    $myhash{$i} = 2*$i;
}

my @keys = keys %myhash;
# @keys = (0,1,2,3,...)
情深缘浅 2024-09-19 19:27:16

以下将执行您想要的操作:

my @orderedKeys = qw(foo bar baz);
my %records     = (foo => '10', bar => '20', baz => '15');

my @givenValues = map {$records{$_}} @orderedKeys;

注意:更好的解决方案是使用 Tie::IxHashTie::Hash::Indexed 到保存器插入顺序。

The following will do what you want:

my @orderedKeys = qw(foo bar baz);
my %records     = (foo => '10', bar => '20', baz => '15');

my @givenValues = map {$records{$_}} @orderedKeys;

NB: An even better solution is to use Tie::IxHash or Tie::Hash::Indexed to preserver insertion order.

难理解 2024-09-19 19:27:16

如果您有一个顺序正确的键列表,则可以使用哈希切片:

 my @keys   = qw(foo bar baz);
 my %given  = {foo => '10', bar => '20', baz => '15'}
 my @values = @given{@keys};

否则,请使用 Tie::IxHash

If you have a list of keys in the right order, you can use a hash slice:

 my @keys   = qw(foo bar baz);
 my %given  = {foo => '10', bar => '20', baz => '15'}
 my @values = @given{@keys};

Otherwise, use Tie::IxHash.

囚你心 2024-09-19 19:27:16

您可以使用 values ,但我认为您无法按正确的顺序获取它们,因为在创建哈希时顺序已经丢失

You can use values , but I think you can't get them in the right order , as the order has been already lost when you created the hash

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文