Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.08.07;
Скачать: CL | DM;

Вниз

Обратная операция SetLength(MyArray, 10)   Найти похожие ветки 

 
Silver_ ©   (2003-07-24 10:16) [0]

только с УСЛОВИЕМ чот мне надо освободить, скажем, 5-ый элемент (слыште ну прямо как в кино ё моё :о) )
типа FreeArrayItem(MyArray, 5)

Да знаю что можно в цикле(или Move) "пододвинуть" "последующие" елементы а потом последний удалить SetLength(MyArray, 9) может есть проще и красивей решение.

ЗЫ Просьба не обращать внимание на мои выражения, хотел покороче обьяснить суть вопроса :)


 
Романов Р.В. ©   (2003-07-24 10:26) [1]

Попробуй связаные списки
http://borlpasc.narod.ru/docym/br/8/8_7.htm


 
[lamer]Barmaglot ©   (2003-07-24 10:26) [2]

CopyMemory ?

Приметно так


CopyMemory(MyArray[5],MyArray[6], 4);
SetLength(MyArray, 9);


 
Skier ©   (2003-07-24 10:28) [3]


> может есть проще и красивей решение.

Если хочешь использовать именно дин. массив, то
Move так и так придётся использовать, а вот цикл не нужен, достаточно использовать умножение на размер эл-та массива...


 
Silver_ ©   (2003-07-24 10:36) [4]


> [lamer]Barmaglot © (24.07.03 10:26)
> CopyMemory ?


первый раз вижу и в хелпе тожа нема :)

>
> Skier © (24.07.03 10:28)
> ...
> Move так и так придётся использовать ...


по ходу придётся :)


 
Silver_ ©   (2003-07-24 12:25) [5]

Кстати можа кто на пальцах покажет как
из A[1..10]
получить A[1..9]

A[1..9] := A[1..4] + A[6..10]

А то не пойму как в Move указать что не весь массив хватать а тока часть(или без какойто часть)

ЗЫ С Move не доводилось работать (слышал звон, тока вот где он??? вернее как он :о) )


 
Skier ©   (2003-07-24 12:27) [6]

>Silver_ © (24.07.03 12:25)
Посмотри, например, код метода TList.Delete(...)


 
Anatoly Podgoretsky ©   (2003-07-24 12:31) [7]

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


 
[lamer]Barmaglot ©   (2003-07-24 13:08) [8]

to Silver_

[quote]
первый раз вижу и в хелпе тожа нема :)
[/quote]


CopyMemory - функция в Win32 API. Пишешь в программе выделяешь, жмешь F1. Получаешь подсказку по этой функции, а также по функциям FillMemory, MoveMemory, ZeroMemory. Для использования в программе требуется в Uses прописать ShellAPI.


 
Silver_ ©   (2003-07-24 15:36) [9]


> Skier © (24.07.03 12:27)

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

Поцедура для удаления элемента из любого динамического массива
( <AllType> = Array of Record, Integer, Char, String, ...
<Part of AllType> = Record, Integer, Char, String, ...
соответственно).
procedure DeleteItems(var Source: <AllTipe>; Index, Count: Integer);
var
SourceCount: Integer;
begin
SourceCount := Length(Source);
if Index < 0 then
Index := 0;
if Index > FCount then
Index := FCount;
if Index + Count > SourceCount then
Count := SourceCount - Index;
Dec(SourceCount);
System.Move(Source[Index + Count], Source[Index],
(SourceCount - (Index + Count - 1)) * SizeOf( <Part of AllTipe>));
SetLength(Source, SourceCount - Count);
end;

Так как все это осуществить или у меня слишком разигрался аппетит?


 
Silver_ ©   (2003-07-24 16:04) [10]

procedure DeleteItems(var Source: <AllType>; Index, Count: Integer);
var
SourceCount: Integer;
begin
SourceCount := Length(Source);

// Тута некоторые корректировки диапазона чтоб не шалило :)
if Index < 0 then
Index := 0;
if Index > SourceCount then
Index := SourceCount;
if Index + Count > SourceCount then
Count := SourceCount - Index;
System.Move(Source[Index + Count], Source[Index],
(SourceCount - (Index + Count)) * SizeOf(<Part of AllType>));
SetLength(Source, SourceCount - Count);
end;


Предыдущий код немножечко кривой :о)


 
Набережных С. ©   (2003-07-24 19:03) [11]

Добавь в параметры ItemSize


 
Silver_ ©   (2003-07-25 15:08) [12]


> Набережных С. © (24.07.03 19:03)

а Source какого типа указать? без типа ошибка тута:

SourceCount := Length(Source);



 
Набережных С. ©   (2003-07-25 17:05) [13]

Silver_ © (25.07.03 15:08)
Юа Source какого типа указать?

Я думаю, никакого. А в процедуре приводи его к TByteArray = array of Byte. Тогда все вычисления будут простыми и, главное, быстрыми.


 
Набережных С. ©   (2003-07-25 17:10) [14]

Только при SetLength не забудь учесть ItemSize



Страницы: 1 вся ветка

Текущий архив: 2003.08.07;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.026 c
1-20628
NetKnight
2003-07-21 21:42
2003.08.07
Сишный kbhit() или паскалевский ReadKey в дельфях?


3-20451
Yuraz
2003-07-17 10:26
2003.08.07
Делаю сортировке в Title DBGrid простым способом


7-20823
Shadow
2003-05-25 14:19
2003.08.07
Серийный номер.


7-20829
andre
2003-05-25 02:08
2003.08.07
Температура процессора


1-20588
AlexVM
2003-07-24 11:09
2003.08.07
Как управлять ActionManager ом в runtime