powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Массив - как убрать одинаковые значения
26 сообщений из 26, показаны все 2 страниц
Массив - как убрать одинаковые значения
    #35941006
leokolus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
собственно то что в теме - как убрать повторяющиеся значения в массиве или в лист боксе, есть мысль загнать сначала в датастор и там применить Дистинкт но можно ли это и как реализовать - пожалуйста ваши варианты как это сделать.
Заранее очень благодарен
...
Рейтинг: 0 / 0
Массив - как убрать одинаковые значения
    #35941018
sPaul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Каким образом значения попали в массив или листбокс?
...
Рейтинг: 0 / 0
Массив - как убрать одинаковые значения
    #35942052
Фотография Riska
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
leokolusкак это сделать?
Да как угодно! :)
...
Рейтинг: 0 / 0
Массив - как убрать одинаковые значения
    #35942944
leokolus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sPaul

Массив набирается в цикле при чтении файла

Riska спасибо за предметный ответ, но хотелось бы по конкретнее
...
Рейтинг: 0 / 0
Массив - как убрать одинаковые значения
    #35943050
maxATC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
leokolusпожалуйста ваши варианты как это сделать
Один из вариантов.
leokolusзагнать сначала в датастор и там применить Дистинкт
...
Рейтинг: 0 / 0
Массив - как убрать одинаковые значения
    #35943202
leokolus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maxATC

как Дистинкт применить к датосторе?
...
Рейтинг: 0 / 0
Массив - как убрать одинаковые значения
    #35943490
maxATC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
leokolus maxATC
как Дистинкт применить к датосторе?
Правильный вопрос, по поводу реализации данного, тупо вставка в датосторе на даст этого, надо через таблицу. Делаете таблицу, загоняете туда данные из файла, а уж на основе данной таблицы делаете датосторе с SQL запросом содержащим Дистинкт. Не лучший вариант , но работать будет
...
Рейтинг: 0 / 0
Массив - как убрать одинаковые значения
    #35943491
Dmitry..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
сортируешь датастор,

потом цикл по всем строкам от последней до первой:
если значение строки i совпадает со значением i-1, то удаляем ее.
...
Рейтинг: 0 / 0
Массив - как убрать одинаковые значения
    #35943698
AIS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitry..сортируешь датастор,

потом цикл по всем строкам от последней до первой:
если значение строки i совпадает со значением i-1, то удаляем ее.
Проще сортировка и группировка по нужному столбцу.
...
Рейтинг: 0 / 0
Массив - как убрать одинаковые значения
    #35943751
Dmitry..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
AISПроще сортировка и группировка по нужному столбцу.
может быть, но тогда надо будет строить цикл для выборки данных из датастор с использованием ф-ции findGroupChange (или как ее там % хелпа под рукой нет)
...
Рейтинг: 0 / 0
Массив - как убрать одинаковые значения
    #35944537
Фотография ASCRUS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
leokolus sPaul
Массив набирается в цикле при чтении файла
А может прямо при чтении проверять, что если значение уже присутствует в массиве, то не добавлять его ?
...
Рейтинг: 0 / 0
Массив - как убрать одинаковые значения
    #35944600
AIS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ASCRUSleokolus sPaul
Массив набирается в цикле при чтении файла
А может прямо при чтении проверять, что если значение уже присутствует в массиве, то не добавлять его ?
Тогда надо сразу в DS загружать данные из файла (т.е. без цикла), где в подвязанном DWObject уже сформировано то, что нужно. При необходимости доделать ещё что-то и выгрузить в массив. А может и использовать DS если не так важно иметь данные в массиве.
...
Рейтинг: 0 / 0
Массив - как убрать одинаковые значения
    #35944799
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А какого типа данные? Минимальное/максимальное значение? Общее количиство значений, число уникальных значений. Известно ли про это что-нибудь?
...
Рейтинг: 0 / 0
Массив - как убрать одинаковые значения
    #35945070
maxATC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Возможен и такой вариант (конечно при нем могут быть и ограничения и если только цифровые значения).
Считываем данные файла в массив, i-товое значение будет значение считываемое из файла. Например считываем значение 135 в массиве он будет находиться в таком виде, массив[135] = 135, т.е. тут убиваем сразу дублирующие значения, т.к. следующее 135 попадет туда же. Далее узнаем размерность и в цикле пишем в другой массив, пропуская пустые i-товые значение. Конечно не идеал, т.к. первоначальный массив вырастит до размерности максимального числа в файле, и время цикла выборки также будет зависеть от макс. числа. Но если не большое макс.число, то тоже как вариант.
...
Рейтинг: 0 / 0
Массив - как убрать одинаковые значения
    #35945361
Фотография Филипп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот так
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
$PBExportHeader$n_cst_deduplicator.sru
forward
global type n_cst_deduplicator from datastore
end type
end forward

global type n_cst_deduplicator from datastore
end type
global n_cst_deduplicator n_cst_deduplicator

type variables
protected:

string DW_SYNTAX_START
string DW_SYNTAX_END = ' name=sorter dbname="sorter") )'
end variables

forward prototypes
protected function long dedupe (ref any avalues[])
public function long of_dedupe_array (ref integer arr[])
public function long of_dedupe_array (ref long arr[])
public function long of_dedupe_array (ref string arr[])
public function long of_dedupe_array (ref double arr[])
end prototypes

protected function long dedupe (ref any avalues[]);/*------------------------------------------------------------------------------

 Function:			protected n_cst_deduplicator.Dedupe

 Returns:         Long

 Parameters:      reference Any avalues[]

 Copyright ©2004 DTI - Philip Salgannik

 Date Created: 2/24/2004

 Description:	
 
--------------------------------------------------------------------------------
 Modifications:
 Date            Author              Comments
------------------------------------------------------------------------------*/
IF IsNull(avalues) THEN RETURN  0 
If UpperBound(avalues) <  2  THEN RETURN  0 
long ll_dups
string ls_type, ls_dsdef, ls_err
Reset()
Choose Case ClassName(avalues[ 1 ])
	Case "long", "unsignedlong", "ulong", "int","integer", "uint","unsignedinteger","unsignedint", "double"
		ls_type = "number"
	Case "char", "character", "string"
		ls_type = "char(4000)"
	CASE ELSE
		//excercise for the reader
		RETURN  0 
END CHOOSE

ls_dsdef = DW_SYNTAX_START + ls_type + DW_SYNTAX_END
IF Create(ls_dsdef, ls_err) <>  1  THEN RETURN - 1 			

object.sorter.Primary = avalues

SetSort("sorter A")
Sort()

SetFilter("sorter <> sorter[-1] or GetRow () = 1" )
Filter()

ll_dups = FilteredCount()

IF ll_dups >  0  THEN 
	avalues = object.sorter.Primary
END IF

RETURN ll_dups
end function

public function long of_dedupe_array (ref integer arr[]);/*------------------------------------------------------------------------------

 Function:			public n_cst_deduplicator.of_Dedupe_array

 Returns:         Integer

 Parameters:      reference Integer arr[]

 Copyright ©2004 DTI - Philip Salgannik

 Date Created: 2/24/2004

 Description:	
 
--------------------------------------------------------------------------------
 Modifications:
 Date            Author              Comments
------------------------------------------------------------------------------*/
IF IsNull (arr) THEN RETURN - 1 
long ll_dups
any temp[]
temp = arr
ll_dups = dedupe(temp)
IF ll_dups  >  0  THEN	
	arr = temp	
END IF

RETURN ll_dups

end function

public function long of_dedupe_array (ref long arr[]);IF IsNull (arr) THEN RETURN - 1 
long ll_dups
any temp[]
temp = arr
ll_dups = dedupe(temp)
IF ll_dups  >  0  THEN	
	arr = temp	
END IF

RETURN ll_dups

end function

public function long of_dedupe_array (ref string arr[]);/*------------------------------------------------------------------------------

 Function:			public n_cst_deduplicator.of_Dedupe_array

 Returns:         Long

 Parameters:      reference String arr[]

 Copyright ©2004 DTI - Philip Salgannik

 Date Created: 2/24/2004

 Description:	
 
--------------------------------------------------------------------------------
 Modifications:
 Date            Author              Comments
------------------------------------------------------------------------------*/
IF IsNull (arr) THEN RETURN - 1 
long ll_dups
any temp[]
temp = arr
ll_dups = dedupe(temp)
IF ll_dups  >  0  THEN	
	arr = temp	
END IF

RETURN ll_dups

end function

public function long of_dedupe_array (ref double arr[]);IF IsNull (arr) THEN RETURN - 1 
long ll_dups
any temp[]
temp = arr
ll_dups = dedupe(temp)
IF ll_dups  >  0  THEN	
	arr = temp	
END IF

RETURN ll_dups

end function

on n_cst_deduplicator.create
call super::create
TriggerEvent( this, "constructor" )
end on

on n_cst_deduplicator.destroy
TriggerEvent( this, "destructor" )
call super::destroy
end on

event constructor;/*------------------------------------------------------------------------------

 Event   :			 n_cst_deduplicator.Constructor

 Returns:         Long

 Parameters:      

 Copyright ©2004 DTI - Philip Salgannik

 Date Created: 2/24/2004

 Description:	pbm_constructor
 
--------------------------------------------------------------------------------
 Modifications:
 Date            Author              Comments
------------------------------------------------------------------------------*/
Environment le_env

GetEnvironment(le_env)


DW_SYNTAX_START = 'release ' + String(le_env.PBMajorRevision) + '; datawindow() table(column=(type='

end event

...
Рейтинг: 0 / 0
Массив - как убрать одинаковые значения
    #35945514
maxATC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Филипп,
green fingers
...
Рейтинг: 0 / 0
Массив - как убрать одинаковые значения
    #35945536
Фотография Филипп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maxATCФилипп,
green fingers
Не понял. Акромя как с кином с аналогичным назвванием, это у меня ни с чем не ассоциируется...
...
Рейтинг: 0 / 0
Массив - как убрать одинаковые значения
    #35945557
maxATC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Филипп,

А что так уже не называют разве в Америке людей, которые по ассоциации в России имеют название золотые руки, или просто не знали?
...
Рейтинг: 0 / 0
Массив - как убрать одинаковые значения
    #35945568
maxATC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Филип,
Если интересует как исторически произошло это и откуда взялось, могу написать, если Вам интересно.
...
Рейтинг: 0 / 0
Массив - как убрать одинаковые значения
    #35945590
Фотография Филипп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В Америке как правило говорят Green Thumb (в единственном числе). Так же как и Green Fingers , это означает врожденное умение садовничать , и ни в каком другом смысле не употребляется...
...
Рейтинг: 0 / 0
Массив - как убрать одинаковые значения
    #35945624
maxATC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Филипп,
Ну и в России от ныне не услышишь похвалы "золотые руки", многие сейчас и не поймут, еще и в морду дадут за оскорбление. Прошу извинение у уважаемых модераторов за разведенный флуд.
...
Рейтинг: 0 / 0
Массив - как убрать одинаковые значения
    #35946153
Фотография ChV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Век живи - век учись.
Филипп.......
SetFilter("sorter <> sorter[-1] or GetRow () = 1" )
.......
Красиво. Спасибо пригодится.

Good Luck !
...
Рейтинг: 0 / 0
Массив - как убрать одинаковые значения
    #35947499
leokolus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
уважаемый Филипп, большое спасибо за объект но я никак не соображу как им пользоваться пробую так

string ls_primery[]

n_cst_deduplicator ln_cst_deduplicator
ll_q = ln_cst_deduplicator.of_dedupe_array(ls_primery)

но выскакивает ошибка Null object reference at line....

плиз помогите разобраться
...
Рейтинг: 0 / 0
Массив - как убрать одинаковые значения
    #35947778
maxATC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
n_cst_deduplicator ln_cst_deduplicator
ln_cst_deduplicator= CREATE n_cst_deduplicator
ll_q = ln_cst_deduplicator.of_dedupe_array(ls_primery)
DESTROY ln_cst_deduplicator
...
Рейтинг: 0 / 0
Массив - как убрать одинаковые значения
    #35948140
Фотография Филипп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну и должно быть понятно, что можно было не пижонить, создать прямо в paintere external dataobject с колонками всех типов и совать в (и сортировать/фильтровать) соответствующую. Но так как-то элегантнее :-)
...
Рейтинг: 0 / 0
Массив - как убрать одинаковые значения
    #35948550
leokolus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
всем большое спсибо всё получилось
...
Рейтинг: 0 / 0
26 сообщений из 26, показаны все 2 страниц
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Массив - как убрать одинаковые значения
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]