Поиск в массиве строк

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Fridx
Новичок
Новичок
 
Сообщения: 45
Зарегистрирован: 18.01.2006 (Ср) 4:03

Поиск в массиве строк

Сообщение Fridx » 06.03.2006 (Пн) 12:37

У меня есть массив строк - NAME_OBJ()... Несколько тысяч. Помогите "организовать" поиск в этом массиве определённой строки... пожалуйста.
Нужно чтобы при повторном нажатии на command3 искалась следующая строка, что никак не получается:

Private Sub Command3_Click()
Dim P As Long

For P = T To KOLV_OBJ - 1
If InStr(RTrim(NAME_OBJ(P)), Text1.Text) Then
List1.ListIndex = P
POK = True
T = P + 1
Exit For
End If
Next P
End Sub

P - переменная глобальная чтобы не обнулялась при нажатии на кнопку поиска (command3).
List1 - в нём записаны все строки из массива (можно и в нём искать в принципе).
Text1 - в него вводим строку, которую надо найти.
Последний раз редактировалось Fridx 06.03.2006 (Пн) 12:48, всего редактировалось 1 раз.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 06.03.2006 (Пн) 12:44

Во-первых, если у тебя в листбоксе несколько тысяч записей, это уже говорит о том, что всё неправильно.
Во-вторых, принцип тот же.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 06.03.2006 (Пн) 13:04

GSerg писал(а):Во-первых, если у тебя в листбоксе несколько тысяч записей, это уже говорит о том, что всё неправильно.

Угу. См. тж. http://bbs.vbstreets.ru/viewtopic.php?p=163125#163125
Изображение

Fridx
Новичок
Новичок
 
Сообщения: 45
Зарегистрирован: 18.01.2006 (Ср) 4:03

Сообщение Fridx » 06.03.2006 (Пн) 14:38

А что плохого в том, что много записей?

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Сообщение Twister » 06.03.2006 (Пн) 14:50

А что плохого в том, что много записей?
А что хорошего? Или ты не замечал тормозов при работе с такими списками? А про захламленную память не подумал?
А я все практикую лечение травами...

Nicky
Постоялец
Постоялец
 
Сообщения: 519
Зарегистрирован: 12.08.2004 (Чт) 12:14

Re: Поиск в массиве строк

Сообщение Nicky » 06.03.2006 (Пн) 16:18

Начало-то было хорошее
Fridx писал(а):"У меня есть массив строк - NAME_OBJ()... Несколько тысяч..."

Лажа пошла дальше
Fridx писал(а):"...List1 - в нём записаны все строки из массива (можно и в нём искать в принципе)..."

Думаю, человек осознает и исправится

Fridx
Новичок
Новичок
 
Сообщения: 45
Зарегистрирован: 18.01.2006 (Ср) 4:03

Сообщение Fridx » 06.03.2006 (Пн) 16:24

Ага осознал:) Сейчас упорядочиваю данные в TreeView.
-----
А с поиском никто так и не поможет (даже если без листа)?

Kovu
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 924
Зарегистрирован: 29.04.2005 (Пт) 17:38

Сообщение Kovu » 06.03.2006 (Пн) 19:21

Ну можно совсем радикальное решение- перейти на БД . Удобный поиск включен =)
Если всё делать своими ручками, они скоро отвалятся !

Fridx
Новичок
Новичок
 
Сообщения: 45
Зарегистрирован: 18.01.2006 (Ср) 4:03

Сообщение Fridx » 06.03.2006 (Пн) 22:28

Не, ну какое БД... у меня свой файл, своя структура. Просто нужно, чтобы при повторном нажатии на кнопку поиска искалось следующее значение.

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Сообщение Twister » 07.03.2006 (Вт) 9:18

Fridx писал(а):Ага осознал:) Сейчас упорядочиваю данные в TreeView.
-----
А с поиском никто так и не поможет (даже если без листа)?
Ну а что с ним помогать? Ты поиск проводишь по TreeView? Зря. Загони файл в массив и ищи там - все будет гораздо быстрее.
А я все практикую лечение травами...

Fridx
Новичок
Новичок
 
Сообщения: 45
Зарегистрирован: 18.01.2006 (Ср) 4:03

Сообщение Fridx » 07.03.2006 (Вт) 16:35

Помогите "организовать" поиск в этом массиве определённой строки... пожалуйста.

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 07.03.2006 (Вт) 16:39

Если массив упорядочен, то бинарный поиск.
Если массив неупорядочен, то только перебором.
Для упорядочивания (сортировки) массива есть куча методов, обычно оптимальной является алгоритм быстрой сортировки (Quick Sort). Еще лучше, изначально добавлять записи в массив упорядоченно (либо непосредственно в массив, либо автоматически вести индекс для массива).
Lasciate ogni speranza, voi ch'entrate.

Fridx
Новичок
Новичок
 
Сообщения: 45
Зарегистрирован: 18.01.2006 (Ср) 4:03

Сообщение Fridx » 07.03.2006 (Вт) 16:49

ничего упорядочивать нельзя, т.к. каждый индекс каждого элемента массива важен и привязан к "другим вещам". В самом первом посте написано как я ищу... можете просто подсказать что не так??? почему не ищется :?:

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 07.03.2006 (Вт) 16:50

Тогда упорядочивай не сам массив, а индексируй его и упорядочивай индекс. Либо обходись перебором.
Lasciate ogni speranza, voi ch'entrate.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 07.03.2006 (Вт) 21:23

alibek писал(а):Если массив упорядочен, то бинарный поиск.
Если массив неупорядочен, то только перебором.

Хеш-таблицы отменили? :-?
Изображение

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 07.03.2006 (Вт) 22:18

Для неупорядоченного набора данных?
Все-равно ведь перебор будет.
Lasciate ogni speranza, voi ch'entrate.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 07.03.2006 (Вт) 22:29

Да, для неупорядоченного набора данных.
В худшем случае перебор, в лучшем -- константа. В среднем, как и для двоичного поиска, логарифм.
Изображение

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 07.03.2006 (Вт) 23:03

Я, кстати, про хэш-таблицы как-то и позабыл :)
Но ИМХО в данном случае выгоды от них никакой.
Lasciate ogni speranza, voi ch'entrate.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 08.03.2006 (Ср) 8:29

А в каком случае выгода есть?
Для чего ещё они нужны, кроме быстрого поиска в неупорядоченном массиве?
Изображение

Fridx
Новичок
Новичок
 
Сообщения: 45
Зарегистрирован: 18.01.2006 (Ср) 4:03

Сообщение Fridx » 08.03.2006 (Ср) 11:39

ну нифига вы... разговорились :lol:
Про меня забыли :oops:

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 08.03.2006 (Ср) 12:24

Fridx, что-то мешает сложить все твои строки в коллекцию?
Ключами -- сами строки, значениями -- индексы.
Тогда поиск будет быстрый.
Изображение

Fridx
Новичок
Новичок
 
Сообщения: 45
Зарегистрирован: 18.01.2006 (Ср) 4:03

Сообщение Fridx » 08.03.2006 (Ср) 13:58

В коллекциююю?? Что ето? :oops:

hCORe
VB - Экстремал
VB - Экстремал
Аватара пользователя
 
Сообщения: 2332
Зарегистрирован: 22.02.2003 (Сб) 15:21
Откуда: parent directory

Сообщение hCORe » 08.03.2006 (Ср) 15:52

Код: Выделить всё
Dim cStrings As Collection
    Set cStrings = New Collection
    cStrings.Add 1, "Hi!"
    cStrings.Add 888, "Goodbye"
    MsgBox cStrings("Hi!") '1
    MsgBox cStrings("Goodbye") '888
    Set cStrings = Nothing
Моду создают модоки, а распространяют модозвоны.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот и гости: 77

    TopList