![]() |
Модераторы: korob2001, ginnie |
![]() ![]() ![]() |
|
mario315 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 34 Регистрация: 24.1.2009 Репутация: нет Всего: нет |
Добрый вечер. Подскажите, пожалуйста, есть ли какая функция, с помощью которой, можно получить из массива заданное количество уникальных (не повторяющихся) элементов.
|
|||
|
||||
ginnie |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 6.1.2008 Где: Москва Репутация: 38 Всего: 49 |
Если последовательность не важна, то
если последовательность важна, то
Это сообщение отредактировал(а) ginnie - 27.9.2009, 21:24 -------------------- Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг) |
||||
|
|||||
DaemonSuw |
|
|||
Бывалый ![]() Профиль Группа: Участник Сообщений: 155 Регистрация: 11.3.2008 Репутация: 3 Всего: 3 |
@mas = (1,2,3,12,3,3,4,4);
$count = 2; map {$hash{$_}++} @mas; foreach (keys %hash) { if ($hash{$_} == 1) { print "$_ => $hash{$_}\n" if $count > $i; $i++; }} Добавлено @ 21:24 ginnie, а если такие условие? @array = (1,2,3,4,5,1); $count = 6;
После отработки 41325 - хотя 1 - не уникальный элемент Это сообщение отредактировал(а) DaemonSuw - 27.9.2009, 21:36 |
|||
|
||||
Pfailed |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 933 Регистрация: 19.7.2009 Репутация: 22 Всего: 39 |
А по ресурсам не накладно на каждой итерации вычислять такое выражение, не подскажете? Возможно лучше инкрементную переменную ввести? |
|||
|
||||
ginnie |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 6.1.2008 Где: Москва Репутация: 38 Всего: 49 |
DaemonSuw, наверное я неверно понял задачу. Я прочитал "надо получить N уникальных в рамках нового массива элементов".
Это сообщение отредактировал(а) ginnie - 27.9.2009, 22:10 -------------------- Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг) |
|||
|
||||
ginnie |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1287 Регистрация: 6.1.2008 Где: Москва Репутация: 38 Всего: 49 |
Pfailed, по идее, scalar keys %temp - должно браться из поля KEYS структуры HV (которая представляет хэш), поэтому не должно негативно влиять на производительность. Как дела обстоят на самом деле - не знаю, надо измерять.
-------------------- Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг) |
|||
|
||||
mario315 |
|
|||
Новичок Профиль Группа: Участник Сообщений: 34 Регистрация: 24.1.2009 Репутация: нет Всего: нет |
Спасибо, ginnie. Спасибо, DaemonSuw. Очень помогли.
|
|||
|
||||
jdoe |
|
|||
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 18.9.2009 Репутация: нет Всего: 2 |
use strict;
use warnings; # takes: $count, $arr_ref sub uniq { my @singles; for(@{$_[1]}) { do { push(@singles, $_); last if @singles==$_[0] } unless($_ ~~ @singles); } return @singles; } my @source = qw(1 0 1 6 3 3 1 2 4 2 2 1 1 3 4 2 1 3 4 5 6); $, = ","; print uniq( 4, \@source); #1,0,6,3 print "\n"; print uniq(-1, \@source); #1,0,6,3,2,4,5 print "\n"; print uniq(50, \@source); #1,0,6,3,2,4,5 |
|||
|
||||
gnatyna |
|
|||
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 30.9.2009 Репутация: 1 Всего: 1 |
Не экономично, зато писать просто)
|
|||
|
||||
amg |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1145 Регистрация: 3.8.2006 Где: Новосибирск Репутация: 38 Всего: 50 |
Почти классика:
|
|||
|
||||
gnatyna |
|
||||
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 30.9.2009 Репутация: 1 Всего: 1 |
если $num больше числа уникальных, вернет undefы чтобы заполнить @uniq до $num-1 |
||||
|
|||||
amg |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1145 Регистрация: 3.8.2006 Где: Новосибирск Репутация: 38 Всего: 50 |
||||
|
||||
![]() ![]() ![]() |
Правила форума "Perl" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Perl: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |