Форум программистов, компьютерный форум, киберфорум
HCL Notes: Программирование
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.55/190: Рейтинг темы: голосов - 190, средняя оценка - 4.55
0 / 0 / 0
Регистрация: 16.02.2007
Сообщений: 403
1

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

13.12.2007, 13:58. Показов 34662. Ответов 24
Метки нет (Все метки)

Есть 2 поля (многозначных) такой зависимости:

"Иванов"
"Петров"
"Сидоров"

"2"
"5"
"6"

Задача

Найти все документы Петрова и узнать значение в примере 5

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

Вопрос: еслть ли др. способ поиска в массивах?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.12.2007, 13:58
Ответы с готовыми решениями:

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

Элементы, которые присутствуют в массиве А, но отсутствуют в массиве В (сортировка - выбором, поиск - двоичный)
элементы, которые присутствуют в массиве А, но отсутствуют в массиве В алгоритм сортировки:Выбором...

В одномерном массиве состоящем из n вещественных элементов сделать бинарный поиск числа А в упорядоченном массиве
Всем привет помогите решить задачи 1) В одномерном массиве состоящем из n вещественных элементов:...

Поиск заданного элемента в упорядоченном массиве(бинарный поиск)
Заполнить одномерный массив из n элементов по формуле приведенной в картинке. Размерность массива...

24
1 / 1 / 0
Регистрация: 04.08.2006
Сообщений: 2,950
13.12.2007, 14:12 2
<!--QuoteBegin-LIGHT+14:12:2007, 13:45 -->
<span class="vbquote">(LIGHT @ 14:12:2007, 13:45 )</span><!--QuoteEBegin-->ебаунтом
[snapback]89964" rel="nofollow" target="_blank[/snapback]?[/quote]
раз уж на то пошло то Убаундом ;) :D :D

все документы для петрова можно узнать по поиску db.Search( { my_field *= "Петров" } )
ну а дальше Ubound
0
0 / 0 / 1
Регистрация: 30.06.2007
Сообщений: 2,153
13.12.2007, 14:17 3
Вместо ебаунда можно заюзать ArrayGetIndex
Я раньше побаивался этого метода, но последние коды подверждают, что работает достаточно хорошо.
0
1 / 1 / 0
Регистрация: 04.08.2006
Сообщений: 2,950
13.12.2007, 14:22 4
и шо ? таки быстрее работает чм обычный проход по массиву?
0
0 / 0 / 1
Регистрация: 30.06.2007
Сообщений: 2,153
13.12.2007, 14:26 5
А фик знает, надо зациклить 100000 раз и проверить.
Могу полагать, что чуток да
Хотя хз...
0
0 / 0 / 0
Регистрация: 06.04.2008
Сообщений: 151
12.04.2010, 14:20 6
Цитата Сообщение от Omh
ArrayGetIndex
Я раньше побаивался этого метода, но последние коды подверждают, что работает достаточно хорошо.
Хех, поделюсь с сообществом... Сегодня чуть аджна-чакру не сломал из-за этого метода. Создал двумерный массив, запускаю на нем ArrayGetIndex, в ответ получаю результат с какими-то дикими смещениями. Как оказалось, на многомерных массивах ArrayGetIndex возвращает не реальный индекс элемента, а умноженный на размерность массива. Вот оно чё...
0
0 / 0 / 0
Регистрация: 23.08.2008
Сообщений: 6,252
12.04.2010, 15:45 7
я не понял задачу точно...
но чем не устроит колекция энтрисов + навигатор?
колекцию получаем по ключу а к навигатору приводим (ентрисы) для правильного значения по вьюшке с многозначными полями
0
0 / 0 / 1
Регистрация: 30.06.2007
Сообщений: 2,153
12.04.2010, 16:38 8
Цитата Сообщение от lmike
я не понял задачу точно...
Да там задача 2007 года, думаю уже неактульно

Главная соль тут в этом:


Цитата Сообщение от amigolinx
Как оказалось, на многомерных массивах ArrayGetIndex возвращает не реальный индекс элемента, а умноженный на размерность массива. Вот оно чё...
, Михалыч
0
0 / 0 / 0
Регистрация: 04.08.2008
Сообщений: 408
12.04.2010, 16:46 9
Цитата Сообщение от Omh
Главная соль тут в этом
Спасибо, Капитан Очевидность.
0
0 / 0 / 1
Регистрация: 30.06.2007
Сообщений: 2,153
12.04.2010, 17:00 10
Ну это для тебя капитан очевидность, а lmike видимо не увидел.
Я по капиноочевидческой привычке и разжевал.

Если затупил, парашу паращения, настроение просто отличное, попостить охота!
0
0 / 0 / 0
Регистрация: 03.02.2007
Сообщений: 821
15.11.2010, 16:45 11
Подыму эту темку с таким вопросом:

ArrayGetIndex - вернет первое вхождение в массив?
т.е.

(0) - фф
(1) - йй
(2) - кк
(3) - йй

т.е. ArrayGetIndex(array, "йй") = 1 или 3 ?
Мне нужно последний. Если все-таки возвращает 1, то как найти последний? перебором?
0
0 / 0 / 0
Регистрация: 15.05.2009
Сообщений: 1,454
15.11.2010, 16:54 12
да, ArrayGetIndex(array, "йй") = 1, перебором, и лучше с конца :gigi:
вроде все вопросы =)
0
0 / 0 / 0
Регистрация: 23.08.2008
Сообщений: 6,252
15.11.2010, 16:55 13
мне не понятен смысл массивов с неуникальным ключём
0
0 / 0 / 0
Регистрация: 03.02.2007
Сообщений: 821
15.11.2010, 17:02 14
Цитата Сообщение от lmike
мне не понятен смысл массивов с неуникальным ключём
Есть мульти поле History.

(0) Действие1 # 11-11-2010
(1) Действие2 # 12-11-2010
(2) Действие3 # 12-11-2010
(3) Действие2 # 13-11-2010

Дак вот, "Действие2" может выполняться несколько раз, нужно узнать последнюю дату его выполнения
0
0 / 0 / 0
Регистрация: 23.08.2008
Сообщений: 6,252
15.11.2010, 17:13 15
записывать действия в обратном порядке
но ваш вариант - полюбасу преобразовывать в два массива, что автоматически делает выгодным собаковождение
0
0 / 0 / 0
Регистрация: 16.03.2008
Сообщений: 49
15.11.2010, 17:26 16
Уфф, ну и задача конечно, могу предложить слегка ракообразный способ на скрипте

Вкратце: сначала объединяем массив в стринг, ищем справа и режем назад, считаем что получилось


Код
Function ArrayLastIndex (MyArray) as Long

Dim tempstr As String
Dim searchstr As String
Dim newArray

Dim delim As String

delim = ";" разделитель, можно что угодно, лишь бы оно не находилось в значении поля
searchstr = "my name" что искать

tempstr = Join(MyArray, delim) объединяем массив в стринг

проверяем а есть ли это значение вообще

if InStr(tempstr, searchstr)>0 Then

tempstr = Strleftback(tempstr, searchstr)
if tempstr="" Then если то что мы ищем является первым значением
ArrayLastIndex = 0
Else

NewArray= Split(tempstr, delim)

ArrayLastIndex = Ubound(NewArray)
End If
Else
заглушка если этого значения нету вообще
ArrayLastIndex =-1
End If

End Function
Что то аналогичное можно родить и на собаках, думаю даже проще будет
0
0 / 0 / 0
Регистрация: 23.08.2008
Сообщений: 6,252
15.11.2010, 17:29 17
Цитата Сообщение от nnikyshi
Что то аналогичное можно родить и на собаках, думаю даже проще будет
эссесвено

Код
v:="Действие1 # 11-11-2010":
"Действие2 # 12-11-2010":
"Действие3 # 12-11-2010":
"Действие2 # 13-11-2010";
filtered:=@Trim(@Unique(@Right(@ReplaceSubstring(v;"Действие2 #";{$$});{$$})));
@Subset(filtered;-1);
0
0 / 0 / 0
Регистрация: 16.03.2008
Сообщений: 49
15.11.2010, 18:02 18
ну раз пошла такая малина, то такой вариант:
v:="Действие1 # 11-11-2010":"Действие2 # 12-11-2010":"Действие3 # 12-11-2010":"Действие2 # 13-11-2010";
searchstr:="Действие2 # 13-11-2010";
@If(@Contains(v; searchstr); @Elements(@Explode(@leftback(@Implode(v; ";"); searchstr); ";")); @Return(""))
0
0 / 0 / 0
Регистрация: 03.02.2007
Сообщений: 821
15.11.2010, 18:06 19
подождите, а чем плох допустим мой варант:


Код
i = 0
Forall n In History
If Not ( Instr(n, "Действие2") = 0 ) Then
iIndex = i
End If
i = i + 1
End Forall
в конце кода узнаем индекс... Пока не тестировал, но идея такова.... То что в хистори будет "Действие2" - 100%
0
0 / 0 / 0
Регистрация: 15.05.2009
Сообщений: 1,454
15.11.2010, 18:12 20
Проверяется массив сначала, если надо узнать последнее значение...

LotusScript
1
2
3
4
5
6
7
iIndex = -1
For i=Ubound(History) to Lbound(History) Step -1
If Instr(History(i), "Действие2") > 0 Then
iIndex = i
Exit For
End If
End For
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.11.2010, 18:12

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

Поиск заданного элемента в упорядоченном массиве (бинарный поиск)
Заполнить одномерный массив из n элементов согласно таблицы. Размерность массива задать в виде...

Поиск числа в двумерном массиве (бинарный поиск)
Произвожу поиск элемента в массиве двумя способами: линейным(последовательным) поиском и...

Поиск в массиве. Время, затраченное на поиск.
Вот код: import java.io.*; public class mas { /** * @param args */

Поиск подмассива в массиве. Поиск значения
Помогите исправить программу. вот условие и текст Даны два целочисленных массива X(n) и Y(m)...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.