|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
||||
|
||||
Глюки массивов в Delphi 2009
Всем привет.
Нужно было сравнить два массива, в которых хранятся String значения. Дык вот. Создал два динамических массива. Задал их размеры. Думаю ну понеслась. При нахождении одинаковых значений смещаю их в конец используя алгоритм Код:
for I := 0 to LenGth(Bufer1) do Bufer1[i]:=Bufer1[i+1]; Код:
SetLenGth(Bufer1,LenGth(Bufer1)-1); Эта паскуда убирая последнюю ячейку, стирает значение ячейки которая идёт перед ней превращая её из 'Данные' в ' '. Вывожу данные в листбокс. Иполучается Было: a 0 b 1 c 2 d 3 e 4 f 5 А в итоге b 0 c 1 d 2 3 Тобишь ячейка 3 осталась, а значение String в ячейке 3 просто потёрлось. И что посоветуете делать ? Последний раз редактировалось lmikle, 22.10.2012 в 01:28. |
#2
|
|||
|
|||
1. Последняя ячейка имеет индекс Length()-1 или High(). Т.е. в твоем коде грубая ошибка - выход за пределы массива.
2. При смешении ты смещаешь все ячейка, что явно не правльно. Тебе надо начинать с той, которую ты нашел. 3. Не совсем понятно, что тебе надо в итоге получить. Впечатление, что ты делаешь что-то не то. Предположим, тебе надо получить список значений в первом массиве (A), которых нет во втором (B). тогда примерно так: Код:
var A, B : Array Of String; I, J, K : Integer; begin ... // Здесь заполнение массивов For I := High(A) DownTo Low(A) Do For J := Low(B) To High(B) Do If A[i] = B[J] Then Begin F := True; For K := I To High(A)-1 Do A[K] := A[K+1]; SetLength(A,Length(A)-1); Break; End; end; |