gpt4 book ai didi

perl - 关于 Perl 中哈希排序和打印的问题

转载 作者:行者123 更新时间:2023-12-01 05:37:04 27 4
gpt4 key购买 nike

我在如何打印我的散列内容方面遇到了麻烦。

这样的代码片段,

#!/usr/bin/perl -w
use strict;
use warnings;

my (%data, $keyword);

while (my $line = <DATA>){
next unless $line =~ /\S/;
chomp $line;
if ($line =~ /^Keyword/){
$keyword = $line;
}
else {
push @{$data{$keyword}}, $line;
}
}

# How to sort by keys using while loop?
while ( my ($k,$v) = each %data ) {
print "$k => $v\n";
}

# BTW, foreach loop sorting works.
#foreach my $key (sort (keys(%data))) {
# print "$key \t$data{$key}\n";
#}

__DATA__
Keyword1
data1 a
Keyword2
data2 a
data2 b
data2 c
Keyword3


data3 a
data3 b


Keyword4
data4 a
data4 b

输出:

D:\learning\perl>sc4.pl
Keyword3 => ARRAY(0x18418fc)
Keyword1 => ARRAY(0x28925c)
Keyword2 => ARRAY(0x2892fc)
Keyword4 => ARRAY(0x184360c)

其实我觉得Keyword1的值(data1a,只有一行)不是ARRAY。但是输出仍然显示它是一个数组。

你能给我一些关于如何正确打印它的建议吗?

感谢您的投入。

[更新]

我更新了 while 循环 的代码以尝试打印值数组。但还是失败了。

while ( my ($k,@v) = each %data ) {
print "$k\n";
foreach (@v) {
print Dumper (@v);
print "$_\n";
}
}

输出:

D:\learning\perl>sc4.pl
Keyword3
$VAR1 = [
'data3 a',
'data3 b'
];
ARRAY(0x189a674)
Keyword1
$VAR1 = [
'data1 a'
];
ARRAY(0x28925c)
Keyword2
$VAR1 = [
'data2 a',
'data2 b',
'data2 c'
];
ARRAY(0x2892fc)
Keyword4
$VAR1 = [
'data4 a',
'data4 b'
];
ARRAY(0x1841a74)

我已经定义了另一个包含在 while 循环中的 foreach 循环来处理数组值。但效果不佳。我不知道为什么?

最佳答案

首先,您需要定义“排序”的含义。你是按键排序吗?按值(value)观?

如果您要按键排序,最简单的方法是像这样使用 Perl 的内置排序:

foreach (sort keys %data) {
print "$_ => $data{$_};
}

如果你想按值排序,你可以定义一个按值排序的匿名排序函数:

foreach (sort {$data{$a} <=> $data{$b}} keys %data) {
print "$_ => $data{$_};
}

如果你想要任何其他排序,你可以定义一个函数来操作全局变量 $a$b(它们由 自动设置sort) 并根据排序顺序返回 -101

如果你必须用 while 循环来做,我需要再考虑一下。

关于perl - 关于 Perl 中哈希排序和打印的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4202194/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com