Как вставить разделители между столбцами?
У меня есть столбцы в @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