Skeeve has asked for the wisdom of the Perl Monks concerning the following question:
I just discovered SQL::Abstract because it's used by Mojo::PG
In SQL::Abstract you can write an insert command like this:
my $sql= new SQL::Abstract( array_datatypes => 1 ); my $required = { a => [1, 3, 5], b => [2, 4, 6],}; my($stmt, @bind)= $sql->insert( testtable => $required );
This will be created:
stmt: "INSERT INTO testtable ( a, b) VALUES ( ?, ? )" @bind: ( [ 1, 3, 5 ], [ 2, 4, 6 ] );
I receive JSON data in my script and so my data is like this:
my $data = [ {a => 1, b => 2}, {a => 3, b => 4}, {a => 5, b => 6}, ];
I'm wondering whether or not there is something which would give me the required hash of arrays from my existing array of hashes.
My lengthy attempt is like this:
# %columns will become the hash of arrays my %columns; # Foreach row of data collect its keys and create an empty array in %c +olumns $columns{$_} //= [] foreach map { keys %$_ } @$data; # Then, for each row foreach my $row ( @$data ) { # push the value foreach column push @{$columns{$_}}, $row->{$_} foreach keys %columns; }
Is there a better way to achieve this transposition?
s$$([},&%#}/&/]+}%&{})*;#$&&s&&$^X.($'^"%]=\&(|?*{%
+.+=%;.#_}\&"^"-+%*).}%:##%}={~=~:.")&e&&s""`$''`"e
|
---|
Replies are listed 'Best First'. | |
---|---|
Re: Array of Hashes to Hash of arrays for SQL::Abstract
by hippo (Bishop) on Mar 18, 2020 at 09:48 UTC | |
by Skeeve (Parson) on Mar 18, 2020 at 10:39 UTC | |
by Veltro (Hermit) on Mar 18, 2020 at 16:27 UTC | |
by haukex (Archbishop) on Mar 19, 2020 at 09:52 UTC | |
by Skeeve (Parson) on Mar 19, 2020 at 15:13 UTC | |
Re: Array of Hashes to Hash of arrays for SQL::Abstract
by BillKSmith (Monsignor) on Mar 18, 2020 at 17:48 UTC | |
Re: Array of Hashes to Hash of arrays for SQL::Abstract
by Marshall (Canon) on Mar 18, 2020 at 22:07 UTC | |
Re: Array of Hashes to Hash of arrays for SQL::Abstract
by kcott (Archbishop) on Mar 19, 2020 at 07:46 UTC |
Back to
Seekers of Perl Wisdom