查找perl中每个键的最大哈希值
我有一个这样结构的文件查找perl中每个键的最大哈希值,perl,hash,key,Perl,Hash,Key,我有一个这样结构的文件 >test1 MATRTQARGA >test2 MRIIEGKLQLQG >test1 MATRTQARGAVVELLYAFESGNEEIKKIASSML 我想要的结果是什么 >test2 MRIIEGKLQLQG >test1 MATRTQARGAVVELLYAFESGNEEIKKIASSML 我在考虑一个哈希结构哪些键是带有>的行,每个>行后面的下一行将是值,然后对于每个键,我知道如何打印长度最长的字符串,但是由于哈希结构不能有
>test1
MATRTQARGA
>test2
MRIIEGKLQLQG
>test1
MATRTQARGAVVELLYAFESGNEEIKKIASSML
我想要的结果是什么
>test2
MRIIEGKLQLQG
>test1
MATRTQARGAVVELLYAFESGNEEIKKIASSML
我在考虑一个哈希结构哪些键是带有>的行,每个>行后面的下一行将是值,然后对于每个键,我知道如何打印长度最长的字符串,但是由于哈希结构不能有重复的键,我不知道该怎么做您不需要重复的键,您只需存储每个键的当前最长值,并在获得更长的键时替换它:
my %longest;
my $curkey;
while (<>) {
chomp;
if (/^>/) {
$curkey = $_;
$curkey =~ s/^.//; # Remove '>' prefix;
next;
}
if (length($_) > length($longest{$curkey})) {
$longest{$curkey} = $_;
}
}
my%最长;
我的$curkey;
而(){
咀嚼;
如果(/^>/){
$curkey=$\ux;
$curkey=~s/^./#删除'>'前缀;
下一个
}
if(长度($)>长度($longest{$curkey})){
$longest{$curkey}=$\;
}
}
另一种不那么直观的方式
#!/usr/bin/env perl
use strict;
use Data::Dumper;
local $/ = ">"; # local not really needed here, as its in the global scope..
my %unqs;
while(<DATA>) {
next if (m/^\s*>/);
my @arr = grep { not m/>|^\s*$/ } split(/\n/);
$unqs{$arr[0]} = $arr[1] if (length($arr[1]) > length($unqs{$arr[0]}));
}
print Dumper(\%unqs);
__DATA__
>test1
MATRTQARGA
>test2
MRIIEGKLQLQG
>test1
MATRTQARGAVVELLYAFESGNEEIKKIASSML
#/usr/bin/env perl
严格使用;
使用数据::转储程序;
本地$/=“>”;#这里并不真正需要本地,因为它在全球范围内。。
我的%unqs;
while(){
下一个if(m/^\s*>/);
my@arr=grep{not m/>^\s*$/}拆分(/\n/);
$unqs{$arr[0]}=$arr[1]if(length($arr[1])>length($unqs{$arr[0]}));
}
打印转储程序(\%unqs);
__资料__
>测试1
马特卡加
>测试2
MRIIEGKLQLQG
>测试1
Matrtqargavellyafesgneeikkiassml
现在您可以使用
%unqs
散列并将其打印到文件中,您将得到您想要的内容。:为什么我尝试以相同的方式读取文件时它不起作用