Мой брат имеет тысячи наименований идентификаторов и количества проданных товаров в следующем виде:Perl: Как сделать оптимальный рейтинг
$VAR1 = {
'sold_times' => 4,
'item_id' => 1,
};
$VAR2 = {
'sold_times' => 1,
'item_id' => 2,
};
...
Эта информация приходит от чтения журнала. В Perl, эти данные определяются как:
my @items_ids_sold_count_map =
map({ sold_times => $item_id_sold_count_map{$_}, item_id => $_,}, @items_ids);
Где: $ item_id_sold_count_map хэш и @items_ids ключи от такого хэша. Для справки, хэш приходит от чтения файла журнала, как я уже говорил раньше:
open my $infile, "<", $file_location or die("$!: $file_location");
while (<$infile>) {
if (/item_id:(\d+)\s*,\s*sold/) {
$item_id_sold_count_map{$1}++;
}
}
close $infile;
Я хотел бы представить это в рейтинге. Критерии будут «sold_items» в порядке убывания. Например, мне представляется, что он представлен в структуре данных, такой как:
$VAR1 = { 'position' => 1, 'info' => { 'item_id' => 1, 'sold_items' => 4 },
'position' => 2, 'info' => { 'item_id' => 2, 'sold_items' => 1 }, ... };
Как создать эту структуру данных? В то время как Im не ищет «лучший» способ точно, есть около 500 000 предметов.
Возможно, вам не хватает уровня группировки в нужной структуре данных. У вас не может быть дубликатов одного и того же ключа в одном хеше. – Barmar
Почему бы просто не отсортировать массив по 'sold_items'? Тогда индекс массива - это позиция, вам не нужен другой хеш. – Barmar
@items_ids = (1, 2); – ado