9 votes

Déclarer des tableaux en Perl6 avec des plages multiples

J'essaie de créer un tableau en Perl6 avec deux plages différentes comme je l'aurais fait en Perl5 :

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

Cependant, cela crée un tableau à deux dimensions

[
    [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
        ]
]

alors qu'il devrait s'agir d'un tableau 1d, comme dans le cas suivant (3..9, 11..16) aurait été en 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
]

Je peux facilement contourner ce problème, bien sûr, avec append mais comment puis-je obtenir le résultat Perl5 de (3..9, 11..16) en Perl6 en une seule ligne ?

12voto

Håkon Hægland Points 5103

Les .. L'opérateur crée un Gamme et vous créez ainsi une liste contenant deux plages. Pour établir une liste des valeurs contenues dans les plages, vous devez les dérouler et les aplatir.

Voici deux façons de procéder :

  • Utiliser un Slip (glissement) :

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

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X