The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
Красиво собрать массив из глубин JSON, !*! GoldenCeylon, 08-Фев-19, 09:13  [смотреть все]
  • Красиво собрать массив из глубин JSON, !*! Andrey Mitrofanov, 09:24 , 08-Фев-19 (1)
  • Красиво собрать массив из глубин JSON, !*! Аноним, 05:06 , 10-Фев-19 (3)
  • Красиво собрать массив из глубин JSON, !*! Аноним, 13:53 , 14-Фев-19 (5)
  • Красиво собрать массив из глубин JSON, !*! erera22, 20:44 , 18-Фев-19 (6)
    • Красиво собрать массив из глубин JSON, !*! михалыч, 10:31 , 06-Мрт-19 (8)
      > еще до кучи:
      > push @names, $_->{name} for @$json;

      в данном случае for используется как модификатор, но суть дела от этого не меняется
      и это фактически, да и практически ничем не отличается от классического перебора в цикле

      for ( @{$json} ) {
          push @names, $_->{name};
      }

      написано короче,
      но ещё не известно, что быстрей и лучше для понимания и восприятия
      (в данном конкретном случае) ))

      • Красиво собрать массив из глубин JSON, !*! михалыч, 18:31 , 09-Мрт-19 (9) +1
        дело было вечером, делать было нечего,
        было скучно..

        вспомнил бородатый анекдот дневник джигита (абрека),

        захотел вернуться к этому и выяснить, что быстрее работает,
        потому как map тоже является циклом, только хитрозаточенным,
        в отличии от for (foreach) и, думаю, не очень его быстрее

        и чтобы хейтеры (не путать с хипстерами) не начали своё любимое
        "пруф или трепло", решил - хайпанём, немножечко? ))

        вот proof, сиречь доказательство


        #!/usr/bin/perl

        use strict;
        use warnings;
        use JSON;
        use Data::Dumper;
        use Benchmark 'cmpthese';


        my $json_text = '[
        {
          "id" : "1",
          "name" : "Name1"
        },
        {
          "id" : "2",
          "name" : "Name2"
        },
        {
          "id" : "3",
          "name" : "Name3"
        }]'
        ;

        #my $json = JSON->new->decode($json_text);
        my $json = decode_json($json_text);

        print Dumper($json);

        sub mapng {
            my @names = map { $_->{name} } @{$json};

        }

        sub modif {
            push my @names, $_->{name} for @{$json};
        }

        sub cycle {
            for ( @{$json} ) {
                push my @names, $_->{name};
            }
        }


        cmpthese(
          -1,
          {
            'mapng' => sub { mapng($json) },
            'modif' => sub { modif($json) },
            'cycle' => sub { cycle($json) },
          }
        );

        __END__


        что видим?
        что так и да, mapping быстрее, но не в разы

        # ./test.pl
        $VAR1 = [
                  {
                    'name' => 'Name1',
                    'id' => '1'
                  },
                  {
                    'name' => 'Name2',
                    'id' => '2'
                  },
                  {
                    'name' => 'Name3',
                    'id' => '3'
                  }
                ];
                  Rate mapng cycle modif
        mapng 239064/s    --   -8%   -9%
        cycle 260979/s    9%    --   -1%
        modif 262926/s   10%    1%    --

        выигрыш по скорости небольшой, всего лишь код немного короче (красивее? ;) ),
        (думаю, что map выгоден для обработки и трансформации массива в другой массив)

        такие дела

        блин, опять скучно..




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру