Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

case +string


Страницы:   1 2 3

07002 ©   (2007-08-16 20:23:00) 

Я приавильно понимаю, что в операторе case использовать string не представляется возможным?

var
 ss: string[40];
 s1, s2: string[40];
begin
 case ss of
   s1: Halt(1);
   s2: Halt(0);
 end;
end;


Leonid Troyanovsky   (2007-08-18 10:28:00) [1]


> DevilDevil ©   (17.08.07 15:56) [39]

> приведи простенький алгоритм хеширования строк

THashedStringList Class (RTFM: Delphi Help)
See also: IniFiles.pas

--
Regards, LVT.


Leonid Troyanovsky   (2007-08-17 17:23:00) [2]


> DevilDevil ©   (17.08.07 15:23) [37]

> следовательно, существует вероятность (и немаленькая), что
> сравнение может произойти некорректно. Т.е. если 2 строки
> не эквивалентны, а хеш-коды совпадают

Это называется коллизией. Ничего страшного.
Обычно ключи сортируют по хешу, а окончательное решение
принимают после полного сравнения ключей.

Выигрыш достигается, если поиск по хешу  + перебор ключей
с одинаковым хешем, дешевле, чем полный перебор.

--
Regards, LVT.


palva   (2007-08-17 16:48:00) [3]


> DevilDevil ©   (17.08.07 16:19) [42]
> у тебя ненамного лучше

А чем вам не понравилась моя реплика?


DevilDevil   (2007-08-17 16:48:00) [4]

> Jeer ©   (17.08.07 16:39) [43]

да, прикольно


Jeer   (2007-08-17 16:39:00) [5]

// Case-string:

case CaseStr(s, ['Первый', 'Второй', 'Третий']) of
 0: ShowMessage('1: ' + s);
 1: ShowMessage('2: ' + s);
 2: ShowMessage('3: ' + s);
else
 ShowMessage('else: ' + s);
end;

function CaseStr(const s: string; lstStr: array of string): integer;
var
 i: integer;
begin
 result := -1;
 for i := 0 to High(s) do
   if s = lstStr[i] then begin
     result := i;  break;
   end;
end;


DevilDevil   (2007-08-17 16:19:00) [6]

> palva ©   (17.08.07 16:04) [41]

у тебя ненамного лучше

> tesseract ©   (17.08.07 15:59) [40]

а как тогда? только посимвольно?


palva   (2007-08-17 16:04:00) [7]

> реплики типа "пограммистский маразм" я бы посоветовал оставлять при себе
Это не моя реплика, тем более что я с ней не согласен.


tesseract   (2007-08-17 15:59:00) [8]


> приведи простенький алгоритм хеширования строк, я постараюсь
> найти две неравные строки... Контрольная сумма, например


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


DevilDevil   (2007-08-17 15:56:00) [9]

> tesseract ©   (17.08.07 15:36) [38]

приведи простенький алгоритм хеширования строк, я постараюсь найти две неравные строки... Контрольная сумма, например


tesseract   (2007-08-17 15:36:00) [10]


> следовательно, существует вероятность (и немаленькая), что
> сравнение может произойти некорректно.


Нет такой вероятности. См описание хэш функции. Так индексы полей CHAR на всех БД строяться.


DevilDevil   (2007-08-17 15:23:00) [11]

> DrPass ©   (17.08.07 01:35) [6]
>
> Это, кстати, будет эффективнее, чем делать if ... then,
> т.к. оно строит хеш-таблицу строк


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


tesseract   (2007-08-17 15:10:00) [12]


> Хеш-функция - это функция возвращающая один и тот жерезультат
> для любых двух одинаковых аргументов.


Во загнул, круче чем в маркетинге определение......

В принципе то же самое, вид сбоку.


sdts   (2007-08-17 15:02:00) [13]


> слишком всё просто

http://ru.wikipedia.org/wiki/%D0%A5%D0%B5%D1%88%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5


DevilDevil   (2007-08-17 14:57:00) [14]

> Leonid Troyanovsky ©   (17.08.07 14:52) [33]

спасибо. это точное определение ?
что то неверится, слишком всё просто


Leonid Troyanovsky   (2007-08-17 14:52:00) [15]


> tesseract ©   (17.08.07 14:11) [31]

> Хэш функция - это функция возвращающая различный результат
> на всём диапазоне значений аргумента.

Хеш-функция - это функция возвращающая один и тот же
результат для любых двух одинаковых аргументов.

Т.е., если хеши не совпадают, то аргументы различны.
Обратное, в общем случае, неверно.

--
Regards, LVT.


DevilDevil   (2007-08-17 14:28:00) [16]

> там хэширование строк

там хеширование СИМВОЛОВ, для каждого символа строки

говоря про удобство я имею ввиду удобное caseвместо бесконечного if else if else if else


> Хэш функция - это функция возвращающая различный результат
> на всём диапазоне значений аргумента.


а если более предметно ?


tesseract   (2007-08-17 14:11:00) [17]


> :)) ну вот и где там strung-case ? там приведён алгоритм
> быстрого сравнения строк без учёта регистра.


там хэширование строк - его в case и пихай, если уж тебе лень писать алготим с числовыми константами.


> кстати, что есть "хеш" ?


Хэш функция - это функция возвращающая различный результат на всём диапазоне значений аргумента.

Крипто хэш : по значению функции нельзя восстановить аргумент.


Игорь Шевченко   (2007-08-17 14:07:00) [18]


> кстати, что есть "хеш" ?
> сколько лет живу, до сих пор незнаю. просто ранее расчитанная
> таблица ?


А туда же.


DevilDevil   (2007-08-17 13:55:00) [19]

> tesseract ©   (17.08.07 13:31) [28]

:)) ну вот и где там strung-case ? там приведён алгоритм быстрого сравнения строк без учёта регистра.

кстати, что есть "хеш" ?
сколько лет живу, до сих пор незнаю. просто ранее расчитанная таблица ?


tesseract   (2007-08-17 13:31:00) [20]


> - если бы такая возможность поддерживалась в Delphi, хуже
> было бы ?


В delphi такая возможность есть. Вот пример :

http://delphimaster.ru/cgi-bin/forum.pl?id=1187184079&n=3


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо