The OpenNET Project / Index page

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



Вариант для распечатки  
Пред. тема | След. тема 
Форум WEB технологии (Perl)
Режим отображения отдельной подветви беседы [ Отслеживать ]

Оглавление

Красиво собрать массив из глубин JSON, GoldenCeylon (?), 08-Фев-19, (0) [смотреть все]

Сообщения [Сортировка по времени | RSS]


8. "Красиво собрать массив из глубин JSON"  +/
Сообщение от михалыч (ok), 06-Мрт-19, 10:31 
> еще до кучи:
> push @names, $_->{name} for @$json;

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

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

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

Ответить | Правка | Наверх | Cообщить модератору

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

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

захотел вернуться к этому и выяснить, что быстрее работает,
потому как 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 выгоден для обработки и трансформации массива в другой массив)

такие дела

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

Ответить | Правка | Наверх | Cообщить модератору

11. "Красиво собрать массив из глубин JSON"  +/
Сообщение от Шёл мимо (?), 10-Авг-19, 09:34 
Наверное ответ был на этот пост
Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




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

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