我正在尝试使用包Normalize,但我有数据在数组(@x
)中,而不是包中需要进行规范化的一些指向数组。
将指向数组中的数据格式称为哈希
my %xx = ('1' => 22.595451, '2' => 20.089094, '3' => 17.380813);
当前数据格式
my @x = qw/22.595451 20.089094 17.380813/;
即。 ('22.595451', '20.089094', '17.380813')
。
如何将数据转换为指向数据结构?
答案 0 :(得分:2)
您称之为“指向数组”的实际名称是哈希,它是一种关联数组。
my %xx; $xx{$_} = $x[$_] for 0..$#x;
-OR -
my %xx = map { $_ => $x[$_] } 0..$#x;
也就是说,Borodin指出该模块的函数接受对数组的引用以及对哈希的引用。这意味着你不需要做
my %xx = map { $_ => $x[$_] } 0..$#x;
$norm->normalize_to_max(\%xx);
因为你可以简单地做
$norm->normalize_to_max(\@x);
答案 1 :(得分:2)
您可以通过引用传递数组,而不是使用哈希。喜欢这个
use strict;
use warnings;
use Normalize;
my @x = qw/ 22.595451 20.089094 17.380813 /;
my $norm = Normalize->new(round_to => 1e-16);
$norm->normalize_to_max(\@x);
print "$_\n" for @x;
将规范化@x
的内容
答案 2 :(得分:2)
将数组转换为哈希的最简单方法。
my %hash;
@hash{ keys @array } = values @array;