如何在Perl中以随机顺序打印STDIN中的行?

前端之家收集整理的这篇文章主要介绍了如何在Perl中以随机顺序打印STDIN中的行?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想做 sort(1)的逆:在stl中将stdin的每一行随机化为stdout.

解决方法

我敢打赌,真正的Perl黑客会把它拆开,但在这里仍然如此.
use strict;
use warnings;
use List::Util 'shuffle';

my @lines = ();
my $bufsize = 512;
while(<STDIN>) {
    push @lines,$_;
    if (@lines == $bufsize) {
        print shuffle(@lines);
        undef @lines;
    }
}
print shuffle(@lines);

这与其他解决方案的区别:

>不会消耗所有输入然后随机化它(内存猪),但会随机化每个$bufsize行(与其他选项相比,不是真正随机和慢的狗).>使用一个返回新列表的模块,而不是编辑Fisher-Yates实现.它们是可以互换的(除了你必须将印刷品与洗牌分开).有关更多信息,请在shell上键入perldoc -q rand.

原文链接:https://www.f2er.com/Perl/172862.html

猜你在找的Perl相关文章