arrays - Perl:将文件加载到哈希中

标签 arrays perl file hash

我很难理解 Perl 中哈希背后的逻辑。任务是将文件加载到散列中并将值分配给使用此文件创建的键。

文件包含字母,每个字母占一行:

a
b
c
d
e

等等。 当使用 array 而不是 hash 时,逻辑很简单:将文件加载到数组中,然后使用某个计数器 ($counter++) 打印具有相应数字的每个元素。

但现在我的问题是,我如何将文件读入我的哈希,分配自动生成的值并以这样的方式对其进行排序,输出如下所示:

a:1
b:2
c:3

我尝试先创建数组,然后使用

将其链接到哈希
%hash = @array

但它使我的哈希不可排序。

最佳答案

有很多方法可以解决这个问题。最直接的方法是在您阅读文件时将数据加载到哈希中。

my %hash;
while(<>)
{
    chomp;
    $hash{$_} = $.;    #Use the line number as your autogenerated counter.
}

如果你已经有一个填充数组,你也可以执行类似的逻辑。

for (0..$#array)
{
    $hash{$array[$_]} = $_;
}

不过,如果您遇到这种情况,map是更糟糕的做事方式。

%hash = map { $array[$_] => $_ } @array;

关于arrays - Perl:将文件加载到哈希中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29904287/

相关文章:

c - 是否可以将大型数组声明为静态并将其用作 c 中其他文件中的 extern

java - 将字符串数组拆分为二维字符数组

c - 根据字母升序查找第一个和最后一个字符串单词

macos - 在 OSX 上的 bash 脚本中运行 perl 命令

c++ - C++读取整个文件目录

Java PrintWriter 文件覆盖

javascript - 如何把这个由数组组成的数组变成由对象组成的数组(定义新的属性)?

mysql - Perl MySQL utf8mb4 问题/可能的错误

multithreading - 将线程迁移到分支

javascript - 文件选择/文件 API - 将文件发送到嵌入式 PDFObject