【问题标题】:Declaring Arrays in Perl6 with Multiple Ranges在 Perl6 中声明具有多个范围的数组
【发布时间】:2019-06-28 17:52:55
【问题描述】:

我正在尝试在 Perl6 中创建一个具有两个不同范围的数组,就像在 Perl5 中一样:

my @cols = (3..9, 11..16);
use Data::Printer:from<Perl5>;
p @cols; exit;

但是,这会创建一个二维数组

[
    [0] [
            [0] 3,
            [1] 4,
            [2] 5,
            [3] 6,
            [4] 7,
            [5] 8,
            [6] 9
        ],
    [1] [
            [0] 11,
            [1] 12,
            [2] 13,
            [3] 14,
            [4] 15,
            [5] 16
        ]
]

当它应该是一个一维数组时,就像 (3..9, 11..16) 在 Perl5 中一样:

[
    [0]  3,
    [1]  4,
    [2]  5,
    [3]  6,
    [4]  7,
    [5]  8,
    [6]  9,
    [7]  11,
    [8]  12,
    [9]  13,
    [10] 14,
    [11] 15,
    [12] 16,
    [13] 17,
    [14] 18,
    [15] 19,
    [16] 20
]

当然,我可以使用append 轻松解决这个问题,但是我如何才能在一行中仅获得 Perl6 中(3..9, 11..16) 的 Perl5 结果?

【问题讨论】:

    标签: raku


    【解决方案1】:

    .. 运算符创建一个Range 对象,因此您正在创建一个包含 2 个 Range 的列表。为了列出 Ranges 中的值,您需要展开它们并将它们展平。

    这里有两种方法:

    • 使用Slip

       my @cols = (|(3..9), |(11..16))
      
    • flat

       my @cols = (3..9, 11..16).flat
      

    【讨论】:

    • 短:my @cols = flat 3..9, 11..16;.
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-26
    • 1970-01-01
    • 2021-12-27
    • 2021-08-29
    • 2015-10-03
    相关资源
    最近更新 更多