Как я могу создать повторяемую подпись структуры данных?

Вы должны удалить атрибуты Height and Width из Grid и WrapPanel.

12
задан brian d foy 20 October 2008 в 14:31
поделиться

6 ответов

Лучший способ сделать это должно использовать систему сериализации глубинной структуры как Storable. Две структуры с теми же данными произведут тот же блоб вывода Storable, таким образом, они смогут быть сравнены.

#!/usr/bin/perl

use strict;
use warnings;

use Storable ('freeze');

$Storable::canonical = 1;

my $one = { foo => 42, bar => [ 1, 2, 3 ] };
my $two = { foo => 42, bar => [ 1, 2, 3 ] };

my $one_s = freeze $one;
my $two_s = freeze $two;

print "match\n" if $one_s eq $two_s;

... И доказать инверсию:

$one = [ 4, 5, 6 ];
$one_s = freeze $one;

print "no match" if $one_s ne $two_s;
10
ответ дан 2 December 2019 в 04:34
поделиться

Я думаю, что Вы ищете, хеш-функция. Я рекомендовал бы подход как это:

use Storable;
$Storable::canonical = 1;
sub ds_to_sig {
    my $structure = shift;
    return hash(freeze $structure);
}

Функциональный хеш может быть любой хеш-функцией, например, функция md5 из Обзора:: MD5

16
ответ дан 2 December 2019 в 04:34
поделиться

Используйте Storable:: nstore, чтобы превратить его в двоичное представление и затем вычислить контрольную сумму (например, с модулем Обзора).

Оба модуля являются базовыми модулями.

7
ответ дан 2 December 2019 в 04:34
поделиться
Digest::MD5->new->add(
  Data::Dumper->new([$structure])
   ->Purity(0)
   ->Terse(1)
   ->Indent(0)
   ->Useqq(1)
   ->Sortkeys(1)
   ->Dump()
)->b64digest();
5
ответ дан 2 December 2019 в 04:34
поделиться

Разве Вы не можете использовать объект вместо структуры? Тем путем Вы видели, является ли объект экземпляром типа, не имея необходимость сравнивать хеши и т.д.

-5
ответ дан 2 December 2019 в 04:34
поделиться

Я думаю слово, которое Вы ищете, "хеширует".

В основном Вы проводите свою структуру данных через функцию, которая генерирует довольно уникальное значение от нее. Это значение было бы Вашим signiture.

0
ответ дан 2 December 2019 в 04:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: