Re: Индекс элемента в массиве. VB6
Добавлено: 03 сен 2008, 14:53
Так от задачи зависит, первое что приходит в голову, это использовать не массив а хэш...gershte писал(а):
Видел решение извращенное выше? Работать будет быстрее чем цикл?
Так от задачи зависит, первое что приходит в голову, это использовать не массив а хэш...gershte писал(а):
Видел решение извращенное выше? Работать будет быстрее чем цикл?
Точно. Если в массиве часто нужно получать индекс, используя значение элемента в качестве критерия для поиска, то структура данных выбрана неудачно. Если о базе данных спрашивать неприлично, то хэш - отличное решение проблемыMarmot писал(а):Так от задачи зависит, первое что приходит в голову, это использовать не массив а хэш...
и реализовать его на перле, благо он там встроенный тип данныхДима писал(а):Точно. Если в массиве часто нужно получать индекс, используя значение элемента в качестве критерия для поиска, то структура данных выбрана неудачно. Если о базе данных спрашивать неприлично, то хэш - отличное решение проблемыMarmot писал(а):Так от задачи зависит, первое что приходит в голову, это использовать не массив а хэш...
Любые извращения будут работать медленнее. Как вы думаете, какова внутренняя реализация команды инстринг? Тот же самый цикл?gershte писал(а):Видел решение извращенное выше? Работать будет быстрее чем цикл?
Реализация может быть и на цикле. Вот только интерпретатор уже не на бэйсике. Поэтому вполне возможно что работать будет быстрее. Посмотрим.Stanislav писал(а):Любые извращения будут работать медленнее. Как вы думаете, какова внутренняя реализация команды инстринг? Тот же самый цикл?gershte писал(а):Видел решение извращенное выше? Работать будет быстрее чем цикл?
Спасибо. Посмотрим.meser писал(а):я прошу прощение за невежество - последний раз что-то писал на васике лет 10 назад, но вот объект Dictionary,
позволяющий слепить ассоциативный массив не поможет решить вашу задачу? Разумеется быстрота зависит от реализации, но вдруг?
http://vb.mvps.org/hardweb/mckinney2b.htm
Циклы реализуются по-разному.Stanislav писал(а):Любые извращения будут работать медленнее. Как вы думаете, какова внутренняя реализация команды инстринг? Тот же самый цикл?
Ну даже и так, но это по любому call - вы будете пушать и попать регистры, делать фар джампы...tasko писал(а):Циклы реализуются по-разному.Stanislav писал(а):Любые извращения будут работать медленнее. Как вы думаете, какова внутренняя реализация команды инстринг? Тот же самый цикл?
Знаю ребят, которые довольно сложную программу (лет этак 10 назад) писали по следующей технологии:
1. Все бизнес вычисления и преобразования написаны на С и скомпилированы в DLL.
2. Все диалоговые окна созданы с помощью VB.
Таким образом были просуммированы преимущества в виде высокой скорости обработки данных и высокой скорости разработки приложения.
Ежели использовать правильную VM/JIT - Java или тот же .NET много чего будет инлайниться/оптимизироваться...Stanislav писал(а):Ну даже и так, но это по любому call - вы будете пушать и попать регистры, делать фар джампы...tasko писал(а):Циклы реализуются по-разному.Stanislav писал(а):Любые извращения будут работать медленнее. Как вы думаете, какова внутренняя реализация команды инстринг? Тот же самый цикл?
Знаю ребят, которые довольно сложную программу (лет этак 10 назад) писали по следующей технологии:
1. Все бизнес вычисления и преобразования написаны на С и скомпилированы в DLL.
2. Все диалоговые окна созданы с помощью VB.
Таким образом были просуммированы преимущества в виде высокой скорости обработки данных и высокой скорости разработки приложения.
to meser:
Если юзать object - то это вообще засада - особенно ежели виртуальные функции вызывать...
С легкостью необычайной. Это, кстати, очень известный способ оптимизации коротких циклов. Ограничения, разумеется, есть, но при известном трудолюбии можно преодолеть (не знаю только, зачем):Marmot писал(а):Ну-ка, ну-ка и как это можно сделать на С/С++ не используя цикл?
Не, ты вообще не въехал в суть задачи. Впрочем, автор топика ее и не поставил так, чтобы можно было въехать. Понять, что на самом деле требуется можно только после уточнений, которых тут нет.sz писал(а):С легкостью необычайной. Это, кстати, очень известный способ оптимизации коротких циклов. Ограничения, разумеется, есть, но при известном трудолюбии можно преодолеть (не знаю только, зачем):Marmot писал(а):Ну-ка, ну-ка и как это можно сделать на С/С++ не используя цикл?
int GetArrayIndex( int* array, int size, int value )
{
assert( size < 10 );
switch( size )
{
case 10:
if (array[9] == value) return 9;
case 9:
if (array[8] == value) return 8;
case 8:
if (array[7] == value) return 7;
case 7:
if (array[6] == value) return 6;
case 6:
if (array[5] == value) return 5;
case 5:
if (array[4] == value) return 4;
case 4:
if (array[3] == value) return 3;
case 3:
if (array[2] == value) return 2;
case 2:
if (array[1] == value) return 1;
case 1:
if (array[0] == value) return 0;
}
return -1;
}
Деда, только не восприми буквально. Это я типа выпендриваюсь.
Hashtable - твое спасение. В VB они кажется называются Dictionaries. Но могу ошибаться - я его не знаю. И знать не хочу, что характерно.
Ну если это так, то Мармот прав - это типичнаая задача для ассоциативного массива (хэша), который в перл используется очень широко и для ВБ сделали объект Dictionary, как раз по мотивам перла.AlexANB писал(а):Не, ты вообще не въехал в суть задачи. Впрочем, автор топика ее и не поставил так, чтобы можно было въехать. Понять, что на самом деле требуется можно только после уточнений, которых тут нет.
....
Соответственно, надо найти, в какую именно строку существующего массива надо писать новый евент. Сравнивать по тому самому текстовому элементу.