Perl   发布时间:2022-04-07  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了数组 – 清理将数组拆分为三分之一并显示给用户的方法大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我在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;

要么

@H_392_2@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");
}

大佬总结

以上是大佬教程为你收集整理的数组 – 清理将数组拆分为三分之一并显示给用户的方法全部内容,希望文章能够帮你解决数组 – 清理将数组拆分为三分之一并显示给用户的方法所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。