Как напечатать запятую «,» в середине предложения, когда это необходимо, Часть 2, Perl - PullRequest
0 голосов
/ 15 ноября 2018

Мне нужно напечатать запятую "," если в списке больше одного, а если больше одного, то в последнем списке я не хочу печатать запятую.Я знаю, что могу использовать Join to, чтобы сделать это, но я не могу зациклить многомерный хеш с запятой, если есть другие данные для добавления.

#!/usr/bin/perl
use strict;
use warnings;
use Tie::Autotie 'Tie::IxHash';

tie my %try, 'Tie::IxHash';
$try{STRONG}{ALLIES}='A';
$try{AGILE}{BOBBY}='B';
$try{AGILE}{HOBBY}='B';
$try{SMART}{CAKRA}='C';
$try{SMART}{PHONE}='C';
$try{SMART}{PEOPLE}='C';

foreach my $temp_0 (keys %try)
{
    print "\n//$temp_0\n\n";
    foreach my $temp_1 (keys %{$try{$temp_0}})
    {
        print "$temp_1, // $try{$temp_0}{$temp_1}\n";
     }
 }

Текущий вывод:

//STRONG

ALLIES, // A

//AGILE

BOBBY, // B
HOBBY, // B

//SMART

CAKRA, // C
PHONE, // C
PEOPLE, // C

Ожидаемый результат:

//STRONG

ALLIES // A

//AGILE

BOBBY, // B
HOBBY // B

//SMART

CAKRA, // C
PHONE, // C
PEOPLE // C

Ответы [ 2 ]

0 голосов
/ 16 ноября 2018

Если это так же просто, как поставить запятую между списками элементов, между которыми ничего нет, вы можете использовать join с ',', как упомянуто @Corion. Поскольку между ними есть другие вещи (комментарии), вот простое изменение, которое работает:

foreach my $temp_0 (keys %try)
{
    print "\n//$temp_0\n\n";
    my @keys = keys %{$try{$temp_0}};
    for (my $i = 0; $i <= $#keys; $i++) {
        my $com = ($i < $#keys) ? ',' : '';
        print "$keys[$i]$com // $try{$temp_0}{$keys[$i]}\n";
     }
}
0 голосов
/ 15 ноября 2018

Вы можете переключить свой внутренний цикл на C-стиль, чтобы цикл проходил по клавишам и не делал последний, а затем обрабатываете его отдельно.Для этого вам понадобится список внутренних ключей в массиве.Также имеет смысл отсортировать их, чтобы вы могли постоянно воспроизводить один и тот же результат.

foreach my $temp_0 (sort keys %try)
{
    # heading
    print "\n//$temp_0\n\n";

    # all but the last entry
    my @keys = sort keys %{$try{$temp_0}};
    for (my $i = 0; $i < $#keys; $i++) {
        print "$keys[$i], // $try{$temp_0}{$keys[$i]}\n";
    }

    # the last entry
    print "$keys[-1] // $try{$temp_0}{$keys[-1]}\n";
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...