Perl——哈希&数据结构

Posted 懒癌终结君

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Perl——哈希&数据结构相关的知识,希望对你有一定的参考价值。










4、哈希

Perl——哈希&数据结构
Perl——哈希&数据结构

例如:身份证号(键)不能重复,而名字(值)可以重复。

Perl——哈希&数据结构

第一排:哈希赋值一对一对的,前两个,第一个是键,第二个是值。
左边:给哈希赋值的清楚版本,一般为了避免错误都会采用这个,而不是第一排。
右边:经常在使用中,会先创建一个哈希,之后再赋值。

Perl——哈希&数据结构

Perl——哈希&数据结构

Perl——哈希&数据结构

基本操作:

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

my %aa=(
'GCA' => 'A''GCC' => 'A''GCG' => 'A',
'TGC' => 'C''TGA' => 'C',
'GAC' => 'D''GAT' => 'D'
);   #创建一个哈希,这个是密码子表,太多后面没打完

my $keys = keys%aa;   #看看有几个元素
print "$keys ";

my @keys = keys(%aa);   #把密码子输出,并按照字母倒序排列
foreach my $keys(sort {$b cmp $a}@keys){
        print "$keys ";
}

while (my($keys , $values) = each%aa){
        print "key: $keys value: $values ";
}   #输出键和值,keys是输出键,values是输出值

my $recode = exists$aa{"GCA"};   #检查GCA是否存在
print "$recode ";

delete$aa{"GCA"};   #删掉GCA
$recode = exists$aa{"GCA"};   #再次检查GCA是否存在
print "$recode ";

$aa{"GCA"} = 'A';   #把GCA添加上去
$recode = exists$aa{"GCA"};   #recode之前定义了,就不用再定义,不用加my
print "$recode ";
sqc@DESKTOP-IUM4B9V:~$ perl hash.pl
7
TGC
TGA
GCG
GCC
GCA
GAT
GAC
key: GCA        value: A
key: GCC        value: A
key: GCG        value: A
key: GAT        value: D
key: GAC        value: D
key: TGA        value: C
key: TGC        value: C
1

1

Perl——哈希&数据结构

Perl——哈希&数据结构

Perl——哈希&数据结构
例题:从键盘输入一个密码子,打印对应的氨基酸
#!/usr/bin/perl -w
use strict;

my %aa=(
'GCA' => 'A''GCC' => 'A''GCG' => 'A',
'TGC' => 'C''TGA' => 'C',
'GAC' => 'D''GAT' => 'D'
);

print "Please input a code: ";

my $code = <STDIN>;   #屏幕输入

print "$code => aa :$aa{$code} ";
sqc@DESKTOP-IUM4B9V:~$ perl hash.pl
Please input a code: GCA
Use of uninitialized value in concatenation (.) or string at hash.pl line 14, <STDIN> line 1.
GCA
 => aa :
sqc@DESKTOP-IUM4B9V:~$

这里报错,因为输入的GCA后面有个自动的换行符,所以需要去掉~

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

my %aa=(
'GCA' => 'A''GCC' => 'A''GCG' => 'A',
'TGC' => 'C''TGA' => 'C',
'GAC' => 'D''GAT' => 'D'
);

print "Please input a code: ";

chomp(my $code = <STDIN>);   #去掉换行符

print "$code => aa :$aa{$code} "
sqc@DESKTOP-IUM4B9V:~$ perl hash.pl
Please input a code: GCA
GCA => aa :A
sqc@DESKTOP-IUM4B9V:~$

5、控制结构

Perl——哈希&数据结构
Perl——哈希&数据结构

条件控制语句

Perl——哈希&数据结构
(1)if…else
#!/usr/bin/perl -w
use strict;

my $a = 1;
my $b = 5;

if($a > $b){
        print "a > b ";
}elsif($a == $b){   #这里添加了一个elsif,
        print "a == b ";
}else{
        print "b > a ";
}

等号是==,赋值是=
输出:

sqc@DESKTOP-IUM4B9V:~$ perl if.pl
b > a
(2)unless

理解成:除非…否则就怎么样…

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

my $a = 6;
my $b = 5;
unless($a < $b){
        print "a >= b ";                                                    
}

输出:

sqc@DESKTOP-IUM4B9V:~$ perl unless.pl
a >= b
Perl——哈希&数据结构
(3)?:

简化的if…else

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

my $a = 6;
my $b = 5;

$a > $b ? print "a>b "print "a<=b ";   #a大于b吗?如果大于——执行:前面的;不大于——执行:后面的

输出:

sqc@DESKTOP-IUM4B9V:~$ perl unless.pl
a>b

循环控制语句

Perl——哈希&数据结构

Perl——哈希&数据结构
(4)for
Perl——哈希&数据结构
#!/usr/bin/perl -w
use strict;

my @array = qw(a b c d e f g);   #建立一个数组

for (my $i = 0; $i <= $#array; $i += 1){   #这个$#array代表最后以一个元素编号
        print "element $i : $array[$i] ";   #输出对应的元素
}

输出:

sqc@DESKTOP-IUM4B9V:~$ perl for.pl
element 0 : a
element 1 : b
element 2 : c
element 3 : d
element 4 : e
element 5 : f
element 6 : g
(5)foreach
Perl——哈希&数据结构
#!/usr/bin/perl -w
use strict;

foreach (@array){
        print "$_ ";
}
foreach my $a (@array){   #重新定义了一个a来赋值
                print "$a ";
        }

两种写法结果都一样,都

以上是关于Perl——哈希&数据结构的主要内容,如果未能解决你的问题,请参考以下文章

如何检查密钥是不是存在于深层 Perl 哈希中?

带有哈希片段的锚未导航到匹配的 id

在 perl 中构建可变深度哈希引用数据结构

将哈希值相加(Perl)

使用sunOS中的find命令比较两个目录中的所有文件

从 perl 数组/哈希打印信息