2015-05-19 4 views
0

Привет У меня есть эти строки и несколько строк в массиве.Удалить почти дублированные строки

revised_1.4_1.4-1.05-jan 
    revised_1.5_1.8-before 
    revised_1.5_1.8-after 
    revised_1.5_0.7-mid 
    deleted&reviewed_0.9-0.8-1.05-jan 
    deleted&reviewed_1.6_1.6-before 
    deleted&reviewed_0.5_1.8-after 
    deleted&uploaded_0.8_1.9-midweek 
    deleted&uploaded_1.0_1.3-offweek 
    accessedbeforesecondquarter_0.8._1.6-jan 
    accessedbeforesecondquarter_0.9_1.7-feb 

Мне нужно сохранить одну из почти похожих строк в массиве. Как я могу создать код для получения этого массива?

revised_1.4_1.4-1.05-jan 
    deleted&reviewed_0.9-0.8-1.05-jan 
    deleted&uploaded_0.8_1.9-midweek 
    accessedbeforesecondquarter_0.8._1.6-jan 

Вот мой код, и, похоже, он не работает для меня, чтобы сохранить строки в массиве.

my %seen; 
my @strings = grep !$seen{ substr($_,0,2) }++, @strings; 

ответ

1

сохраняя дух того, что вы пробовали:

my %seen; 
my @result = grep {! $seen{(split "_",$_)[0]}++} <DATA>; 
print @result; 

__DATA__ 
revised_1.4_1.4-1.05-jan 
revised_1.5_1.8-before 
revised_1.5_1.8-after 
revised_1.5_0.7-mid 
deleted&reviewed_0.9-0.8-1.05-jan 
deleted&reviewed_1.6_1.6-before 
deleted&reviewed_0.5_1.8-after 
deleted&uploaded_0.8_1.9-midweek 
deleted&uploaded_1.0_1.3-offweek 
accessedbeforesecondquarter_0.8._1.6-jan 
accessedbeforesecondquarter_0.9_1.7-feb 

результат:

revised_1.4_1.4-1.05-jan 
deleted&reviewed_0.9-0.8-1.05-jan 
deleted&uploaded_0.8_1.9-midweek 
accessedbeforesecondquarter_0.8._1.6-jan 
+0

Можете ли вы объяснить '(раскол "_", $ _) [0]} ++' этот код. Я использовал оператор декремента вместо '++', он также работает. В чем смысл оператора '++' в вашем коде? –

+2

@aja '(split" _ ", $ _)' возвращает раздел split с '_' с '[0]' вы берете первый элемент списка, а затем увеличиваете счетчик для хэша. Любое ненулевое число истинно в Perl в булевом контексте. Поэтому ''! 1'' или ''! -1'' возвращает false. 'grep' возвращает элементы, которые являются истинными. – xtreak

Смежные вопросы