У меня есть список строк (около 2K), которые мне нужно сравнить со значительно большим списком по определенным критериям и сохранить результаты. Так что я делаю:Устранение списка в цикле
foreach(keys %lines1)
{
($orig1,$orig2,$orig3) = (split(/,/, $lines1{$_}))[1,2,3]
push(@result, grep{ ($data1,$data2,$data3) = (split(/,/, $lines2{$_})[1,2,3];$orig1 == $data1 && $orig2 == $data2 && $orig3 == $data3 } keys %lines2);
$hash_result{$count} = @result;
}
Проблема @result
накапливает данные. Итак, при первом запуске он равен 1, на втором - данные, а размер соответствует 2: старая строка и соответствующая новая строка.
Я чувствую, что мне не хватает чего-то очевидного, но не помню, что.
Оба списка относятся к тому же файлу, что и CSV. Они отличаются друг от друга одним полем.
Вход:
data1,data2,data3,data4,data5,data6,data7,data8,0 - $line1
data1,data2,data3,data4,data5,data6,data7,data8,1 - $line2
Существует несколько линий типа $line1
.
Выход: В выходном файле, вероятно, должен быть хэш списка списка. Задача: для каждого $line1
, которые имеют совпадение, вычисляют некоторую статистику.
Не могли бы вы помочь?
Возможно, я делаю это совершенно неправильно?
[EDIT]
Что я ищу здесь что-то вроде этого:
«$ hash_result {$} граф = [[1,2,3,10,4,6] [ 1,2,3,5,3,11] [1,2,3,100,60,20]] "
, так что я могу рассчитать некоторую статистику по линии $ count.
[/ EDIT]
@mpapec, добавлено объяснение. Спасибо. – Igor
Откуда приходит счет '$? '@ result', конечно, накапливать данные, когда вы нажимаете на них на каждой итерации цикла. – Toto
@ M42, точно. Вы знаете, как очистить список? Проблема в том, что в% строк2 может быть несколько строк, соответствующих% lines1. Переменная $ count - это просто счетчик, который я использую, чтобы отслеживать хэш. AFAIK, я не могу использовать «$ hash_result {@result}», поэтому вместо этого использую «$ count». – Igor