微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Perl – 散列和列的哈希:(

我有一组可变大小的字符串,例如:

AAA23

AB1D1

A1BC

AAB212

我的目标是按字母顺序排列并为COLUMNS收集独特的字符,例如:

第一栏:AAAA

第二栏:AB1A

等等…

在这一刻,我能够通过散列哈希来提取帖子.但是现在,我该如何对数据进行排序?我可以为每个散列哈希创建一个新数组吗?

非常感谢你的帮助!

我的代码

#!/usr/bin/perl

use strict;
use warnings;

my @sessions = (
    "AAAA","AAAC","ABAB","ABAD"
);

my $length_max = 0;
my $length_tmp = 0;

my %columns;

foreach my $string (@sessions){

    my $l = length($string);

    if ($l > $length_tmp){
            $length_max = $l;
    }
}

print "max legth : $length_max\n\n";

my $n = 1;

foreach my $string (@sessions){

    my @ch = split("",$string);

    for my $col (1..$length_max){
        $columns{$n}{$col} = $ch[$col-1];
    }

    $n++;
}

foreach my $col (keys %columns) {

    print "colonna : $col\n";

    my $deref = $columns{$col};

    foreach my $pos (keys %$deref){
            print " posizione : $pos --> $$deref{$pos}\n";
    }

    print "\n";
}

exit(0);

解决方法

你正在做的是旋转阵列.它不需要哈希或任何东西的哈希,只需要另一个数组.令人惊讶的是,List :: Util和List :: MoreUtils都没有提供.这是一个简单的测试实现.我假设你想要用空格填充的短条目,以便列出来正确.

#!/usr/bin/perl

use strict;
use warnings;

use Test::More;
use List::Util qw(max);

my @Things = qw(
    AAA23
    AB1D1
    A1BC
    AAB212
);


sub rotate {
    my @rows = @_;

    my $maxlength = max map { length $_ } @rows;

    my @columns;
    for my $row (@rows) {
        my @chars = split //,$row;
        for my $colnum (1..$maxlength) {
            my $idx = $colnum - 1;
            $columns[$idx] .= $chars[$idx] || ' ';
        }
    }

    return @columns;
}


sub print_columns {
    my @columns = @_;

    for my $idx (0..$#columns) {
        printf "Column %d: %s\n",$idx + 1,$columns[$idx];
    }
}


sub test_rotate {
    is_deeply [rotate @_],[
        "AAAA","AB1A","A1BB","2DC2","31 1","   2",];
}


test_rotate(@Things);
print_columns(@Things);
done_testing;

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐