标签: perl-data-structures

107
推荐指数
2
解决办法
25万
查看次数

Perl数组vs列表

我在Perl中有两个数据结构:

数组:

my @array2 = ( "1", "2", "3");

for $elem (@array2) {
    print $elem."\n";
}
Run Code Online (Sandbox Code Playgroud)

给我以下输出:

1
2
3
Run Code Online (Sandbox Code Playgroud)

还有一个清单:

my @array = [ "1", "2", "3"];                                            

for $elem (@array) {
    print $elem."\n";
}
Run Code Online (Sandbox Code Playgroud)

给出以下输出:

ARRAY(0x9c90818)
Run Code Online (Sandbox Code Playgroud)

显然,我想在两种情况下迭代元素,但为什么第二种解决方案只给我这个数组的引用?

arrays perl perl-data-structures

41
推荐指数
4
解决办法
5万
查看次数

如何在Perl哈希表中存储多个值?

直到最近,我一直在使用相同的键将多个值存储到不同的哈希中,如下所示:

%boss = (
    "Allan"  => "George",
    "Bob"    => "George",
    "George" => "lisa" );

%status = (
    "Allan"  => "Contractor",
    "Bob"    => "Part-time",
    "George" => "Full-time" );
Run Code Online (Sandbox Code Playgroud)

然后我可以参考$boss("Bob"),$status("Bob")但如果每个键都有很多属性,这就变得笨拙,我不得不担心保持哈希同步.

有没有更好的方法在哈希中存储多个值?我可以将值存储为

        "Bob" => "George:Part-time"
Run Code Online (Sandbox Code Playgroud)

然后拆分拆分弦,但必须有一个更优雅的方式.

perl hash multiple-value perl-data-structures

24
推荐指数
2
解决办法
4万
查看次数

双箭头(=>)运算符如何在Perl中工作?

我知道=>运算符的哈希使用,就像这样

$ cat array.pl
%ages = ('Martin' => 28,
         'Sharon' => 35,
         'Rikke' => 29,);

print "Rikke is $ages{Rikke} years old\n";
$ perl array.pl
Rikke is 29 years old
$
Run Code Online (Sandbox Code Playgroud)

我认为这只是初始化哈希的语法,但在答案中如何在Perl中将变量限定为const/final?,=>已经被这样使用了

use Readonly;
Readonly my $infilename => "input_56_12.txt";
Run Code Online (Sandbox Code Playgroud)

究竟是什么=>意思?有更多的方法=>可以使用吗?

perl hash operators perl-data-structures

22
推荐指数
2
解决办法
2万
查看次数

如何维护我添加到Perl哈希的键的顺序?

如何在使用以下程序中的哈希计算实际列表的顺序后维护实际列表的顺序?例如,<DATA>

a
b
e
a
c 
d 
a
c
d
b
etc.
Run Code Online (Sandbox Code Playgroud)

使用哈希,我计算每个元素的出现次数.

我想要的是:

a  3
b  2
e  1
c  2
d  2
Run Code Online (Sandbox Code Playgroud)

但是以下程序显示了我的情况.

my (%count, $line, @array_1, @array_2);
while ($line = <DATA>) {
    $count{$line}++ if ( $line =~ /\S/ );
}
@array_1 = keys(%count);
@array_2 = values(%count);
for(my $i=0; $i<$#array_1; $i++)
{
   print "$array_1[$i]\t $array_2[$i]";
}
Run Code Online (Sandbox Code Playgroud)

perl hash data-structures perl-data-structures

20
推荐指数
5
解决办法
2万
查看次数

perl中的匿名哈希是什么?

$hash = { 'Man' => 'Bill',
          'Woman' => 'Mary,
          'Dog' => 'Ben'
        };
Run Code Online (Sandbox Code Playgroud)

Perl的"匿名哈希"究竟做了什么?

perl hash data-structures perl-data-structures

17
推荐指数
3
解决办法
2万
查看次数

如何在Perl中迭代哈希(哈希)?

我有哈希,其中键的值是其他哈希.

例: {'key' => {'key2' => {'key3' => 'value'}}}

我怎样才能遍历这个结构?

perl hash perl-data-structures

16
推荐指数
5
解决办法
4万
查看次数

如何在Perl中检索整数的序数后缀(如st,nd,rd,th)

我有数字,需要添加后缀:'st','nd','rd','th'.例如:如果数字为42,则后缀为'nd',521为'st',113为'th',依此类推.我需要在perl中执行此操作.任何指针.

regex perl perl-module perl-data-structures

14
推荐指数
3
解决办法
2051
查看次数

如何从Perl中的数组中获取哈希值?

我想在perl中编写一个小的"DBQuery"函数,所以我可以使用一行发送一个SQL语句并接收一个哈希数组,即一个记录集.但是,我遇到了Perl语法的问题(可能还有一些奇怪的指针/引用问题),这阻止了我从数据库中获取哈希的信息.下面的示例代码演示了该问题.

我可以使用以下语法从数组中的哈希中获取数据"Jim":

print $records[$index]{'firstName'}
Run Code Online (Sandbox Code Playgroud)

返回"吉姆"

但是如果我首先将数组中的哈希记录复制到它自己的哈希变量中,那么奇怪的是我无法再访问该哈希中的数据:


    %row = $records[$index];
    $row{'firstName'};
Run Code Online (Sandbox Code Playgroud)

返回""(空白)

以下是显示问题的完整示例代码.任何帮助表示赞赏:


my @records = (
   {'id' => 1, 'firstName' => 'Jim'},
   {'id' => 2, 'firstName' => 'Joe'}
);
my @records2 = ();

$numberOfRecords = scalar(@records);
print "number of records: " . $numberOfRecords . "\n";
for(my $index=0; $index < $numberOfRecords; $index++) {

   #works
   print 'you can print the records like this: ' . $records[$index]{'firstName'} . "\n";

   #does NOT work
   %row = $records[$index];
   print 'but not like this: ' . $row{'firstName'} …
Run Code Online (Sandbox Code Playgroud)

arrays perl hash perl-data-structures

13
推荐指数
2
解决办法
1万
查看次数

如何在Perl中创建2D数组?

我试图在Perl中创建一个2d数组

我的代码:

my @wordsList=();
my @words=();

for ($id=0; $id<=@language.length; $id++)
{

        my $eng = $db->selectall_arrayref("select word from words 
                                                    left outer join language
                                                    on words.languageId = language.languageId
                                                    where words.languageId = $id
                                                    ;");


        foreach $eng(@$eng)
        {   
        my($word) = @$eng;
        $ref_to_Array->[$id][$word] = @words($id,$word);

            }
                return $words($id, $word);
}

$wordsList= NextWords();
print $wordsList;
Run Code Online (Sandbox Code Playgroud)

它返回非...因为我想返回2d数组.

更新

我仍然感到困惑,因为当我执行查询时,它给了我一个单词列表,如:

select word from words where language_id = 1 
(1=english, 2 - chinese, 3 - french) 
Run Code Online (Sandbox Code Playgroud)

我正在使用for循环语言,以便从数据库中获取所有单词

问题是我想循环并希望数组自动添加到2d数组.

arrays perl perl-data-structures

11
推荐指数
1
解决办法
4万
查看次数