Форум: "Основная";
Текущий архив: 2003.08.07;
Скачать: [xml.tar.bz2];
ВнизОбратная операция 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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.008 c