Как вставить разделители между столбцами?

У меня есть столбцы в @columns:

my @columns =('column1', 'column2', 'column3');

и у меня есть разделители в @separators:

my @separators = (',', '|');

Я хочу вставить разделители между столбцами, один за другим:

column1,column2|column

мое решение:

(@columns »~» (|@separators,"")).join("")

Здесь у меня есть три столбца и два разделителя, и как насчет вставки N-1 разделители между N столбцы?

2 ответа

Решение

При условии, что @separators имеет правильное количество значений, вы можете использовать roundrobin,

roundrobin( @columns, @separators ).flat.join()

Так что это должно работать для любой длины @columns или же @separators:

Сначала мы используем >>,>> гипер оператор для составления списка списков.

(@columns >>,>> @separators)

Который дает:

[("column1", ","), ("column2", "|"), ("column3", ",")]

Затем мы свели это в один список с помощью квитанции.

(@columns >>,>> @separators).map( |* )

Который дает:

("column1", ",", "column2", "|", "column3", ",").Seq

Затем мы получаем массив всех, кроме последнего значения:

(@columns >>,>> @separators).map(|*).head(*-1)

За:

("column1", ",", "column2", "|", "column3")

И, наконец, присоединиться к нему ни с чем

(@columns >>,>> @separators).map(|*).head(*-1).join("")

Конечный результат:

column1,column2|column3

Изменение количества столбцов или разделителей не будет иметь значения.

Может быть другое решение:

my @columns =('column1', 'column2', 'column3');
my @separators = (',', '|');
sub sep { $^a ~@separators[$++] ~$^b};
say [[&sep]] @columns;

say [[&sep]] @columns; # but another call cause error


Use of uninitialized value of type Any in string context.
Methods .^name, .perl, .gist, or .say can be used to stringify it to something     meaningful.
in sub sep at <unknown file> line 1
in block <unit> at <unknown file> line 1

Use of uninitialized value of type Any in string context.
Methods .^name, .perl, .gist, or .say can be used to stringify it to something  meaningful.
in sub sep at <unknown file> line 1
in block <unit> at <unknown file> line 1

column1column2column3
Другие вопросы по тегам