Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
7-20824
Intell
2003-04-06 12:02
2003.08.07
Как создавать горячие клавиши?


3-20389
RomanRom2
2003-07-15 15:30
2003.08.07
Создать базу и таблицу в ней.


9-20374
R2D2
2003-02-04 23:35
2003.08.07
GLScene - Управление объектами, созданными динамически


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


1-20550
Nucl
2003-07-23 18:03
2003.08.07
Как определить компонент на котором фокус





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский