加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

数组 – 清理将数组拆分为三分之一并显示给用户的方法

发布时间:2020-12-15 22:04:36 所属栏目:大数据 来源:网络整理
导读:我在perl脚本中有一个排序数组,例如: qw(aaa bbb ccc ddd eee fff ggg hhh iii jjj kkk lll) 有没有一种简单的方法可以将它显示在三列中 前三分之一在左栏 中间三分之一在中间栏 并且最后三分之一在右栏 这样就可以在屏幕上显示元素而不是在屏幕上显示元素.
我在perl脚本中有一个排序数组,例如:
qw(aaa bbb ccc ddd eee fff ggg hhh iii jjj kkk lll)

有没有一种简单的方法可以将它显示在三列中

>前三分之一在左栏
>中间三分之一在中间栏
>并且最后三分之一在右栏

这样就可以在屏幕上显示元素而不是在屏幕上显示元素.例如

aaa eee iii
bbb fff jjj
ccc ggg kkk
ddd hhh lll

我一直试图使用模数,但它变得越来越复杂,并认为可能有一个优雅的解决方案.最终我打算将它用于类似于bash中的select.

谢谢.

解决方法

use List::MoreUtils qw( part );
my $num_rows = int(@a/3);
my @aoa = map [ @a[@$_] ],part { $_ % $num_rows } 0..$#a;
print("@$_n") for @aoa;

要么

use List::MoreUtils qw( part );
my $num_rows = int(@a/3);
my @aoa = part { $_ % $num_rows } 0..$#a;
print("@a[ @$_ ]n") for @aoa;

要么

my $num_rows = int(@a/3);
for my $row_num (0..$num_rows-1) {
   print("@a[ map { $row_num + $num_rows*$_ } 0..2 ]n");
}

以上版本不假设@a%3 == 0.

use List::MoreUtils qw( part );
use POSIX           qw( ceil );
my $num_rows = ceil(@a/3);
my @aoa = map [ @a[@$_] ],part { $_ % $num_rows } 0..$#a;
print("@$_n") for @aoa;

要么

use List::MoreUtils qw( part );
use POSIX           qw( ceil );
my $num_rows = ceil(@a/3);
my @aoa = part { $_ % $num_rows } 0..$#a;
print("@a[ @$_ ]n") for @aoa;

要么

use POSIX qw( ceil );
my $num_rows = ceil(@a/3);
for my $row_num (0..$num_rows-1) {
   print("@a[ grep { $_ < @a } map { $row_num + $num_rows*$_ } 0..2 ]n");
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读