Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Поиск максимального соответствия, Помогите новичку 2 :) 
:(
    Опции темы
CiH
Дата 8.1.2009, 19:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 13.12.2008

Репутация: нет
Всего: нет



Подскажите, пожалуйста новичку.
Есть хеш                         Есть массив    
81090        0,25               810902*   
810902      0,7                 8109058*
У меня при поиске оба значения попадают под первый ключ.
Пытаюсь foreach (grep /^$кеу/,@arrow)
Как сделать поиск максимального соответствия?
Заранее спасибо.

PM MAIL   Вверх
arto
Дата 8.1.2009, 19:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1495
Регистрация: 31.10.2004

Репутация: 38
Всего: 40



отсортировать по длине и сравнивать
PM MAIL ICQ   Вверх
amg
Дата 9.1.2009, 07:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1145
Регистрация: 3.8.2006
Где: Новосибирск

Репутация: 38
Всего: 50



CiH, Не вполне понятно, что в Вашем случае означает поиск максимального соответствия.
У меня есть функции для работы с сокращенными словами. Может, они окажутся полезными.
Код
@array = qw(810902* 8109058*);
%hash = (81090=>0.25, 810902=>0.7);
foreach (keys %hash) {
  print $_, ': ', extended_word($_,@array), "\n";
}

# Принимает сокращенное слово (в начале) и полные слова плоским списком
# Возвращает полное слово, соответствующее сокращенному
sub extended_word {
  my $x = shift;
  my $min_rest = 1e10;
  my $a;
  foreach (@_) {
    m/^$x(.*)/ or next;
    my $l = length $1;
    if ($l < $min_rest) {
      $min_rest = $l;
      $a = $_;
    }
  }
  return defined $a ? $a : $x;
}

# Принимает массив слов
# Возвращает массив сокращенных слов
sub shrunk_words {
  my @b = @_;
  NEW_WORD:
  for ($i=0; $i<@b; $i++) {
    my $last_letter = '';
    while (length($b[$i]) != 1) {
      for ($j=0; $j<@b; $j++) {
        next if $j==$i;
        if ($b[$j] =~ /^$b[$i]/) {
          $b[$i] .= $last_letter;
          next NEW_WORD;
        }
      }
      $last_letter = substr $b[$i], -1, 1, '';
    }
  }
  return @b;
}


PM MAIL   Вверх
CiH
Дата 9.1.2009, 11:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 13.12.2008

Репутация: нет
Всего: нет



Хэш-это код страны - цена. Массив - биллинг с нашей АСТ. Нужно в исходящих звонках найти код страны и подставить стоимость звонка.

arto, у меня была такая мысль, но думал может есть более простое решение. Ключей-то более тысячи а в массиве более 100 000 записей (пока). Тут скорее брать построчно из массива первые х символов и уменьшать на  один пока не найдет в хэше?

amg, спасибо. Но кажется это не то.

А есть ещё идеи?
PM MAIL   Вверх
ginnie
Дата 11.1.2009, 20:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 6.1.2008
Где: Москва

Репутация: 38
Всего: 49



Цитата(CiH @  9.1.2009,  11:52 Найти цитируемый пост)
Тут скорее брать построчно из массива первые х символов и уменьшать на  один пока не найдет в хэше?

Я бы так и сделал, при этом нужно еще в хэше кодов сохранять результат для нового кода, чтобы избежать повторных обработок. 



--------------------
Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг)
PM MAIL Skype Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0789 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.