![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Массив
noob © (2004-11-20 22:47:00)Как удалить i-тый елемент массива
Shama_n (2004-11-21 17:46:00) [1]TStringList и метод Delete[Номер строки] не подходит? :)
begin...end (2004-11-21 09:54:00) [2]
> noob © (20.11.04 22:47)
uses Math;
type
TMyArray = array of TMyType;
procedure DeleteItem(var Arr: TMyArray; Index: Integer);
begin
if InRange(Index, Low(Arr), High(Arr)) then
begin
MoveMemory(@Arr[Index], @Arr[Index + 1], SizeOf(Arr[Index]) * (Length(Arr) - Index));
SetLength(Arr, Length(Arr) - 1)
end
end.
Новичек (2004-11-21 09:42:00) [3]Может, так:
procedure DeleleElement(Index: Integer );
procedure AddElement(Index: Integer; ANew: AnsiString );
var
A: Array of AnsiString;
implementation
procedure DeleleElement(Index: Integer );
var
LastEl: Integer;
begin
LastEl := High(A);
if Index < LastEl then move(A[Index + 1], A[Index],
(LastEl - Index) * SizeOf(A[Index]));
SetLength(A, LastEl);
end;
procedure AddElement(Index: integer; ANew: AnsiString);
var
Len: integer;
begin
Len := Length(A);
if Index >= Len then Index := Len + 1;
SetLength(A, Len + 1);
move( A[Index], A[Index+1],
(Len-Index) * SizeOf(A[Index]));
A[Index] := ANew;
end;
SergP (2004-11-21 08:49:00) [4]Что-то в последнее время сабжевый вопрос начал многих интересовать, типа как раньше когда-то всех интересовало "как запендюрить иконку туда где часики". Пора бы сделать ФАК по удалению элемента из диначеского массива.
Defunct (2004-11-21 04:53:00) [5]> delete(s,i,1) - по памяти, мож и ошибся...
да не.. F8 там самое то!
нет программы - нет проблем :)
KilkennyCat (2004-11-21 03:16:00) [6]
> чисел integer (вроде это нужно автору, как я понял).
неа, он там пишет, что стринг...
чтож, ежели стринг рассматривать как массив...
delete(s,i,1) - по памяти, мож и ошибся...
Piter (2004-11-21 02:18:00) [7]Ну встроенной функции вроде нету... я написал бы где-то так:
function DeleteElement(ListInt: TBoundArray; Index: integer): boolean;
var
i: integer;
begin
if ( Index > High(ListInt) ) or ( Index < 0 ) then
Result := false
else
begin
for i:=Index to High(ListInt) - 1 do
ListInt[i] := ListInt[i+1];
SetLength(ListInt, Length(ListInt) - 1);
Result := true;
end;
end;
Это соответственно удаление элемента из динамического массива чисел integer (вроде это нужно автору, как я понял).
С другой стороны код очевиден и странно что самому нельзя догадаться...
Defunct (2004-11-21 02:05:00) [8]> to Defunct Задоронова насмотрелся?
Да нет, вопросов начитался.
Если вы знаете как можно иначе "удалить" i-тый элемента массива, то расскажите мне.
KilkennyCat (2004-11-21 01:39:00) [9]
> Palladin © (21.11.04 01:07) [6]
Pascal## ?
Palladin (2004-11-21 01:07:00) [10]
> [2] YurikGL © (21.11.04 00:01)
А это вообще описанию не поддается... какойто Pascal нового поколения, в котором можно объявить индексируемые (индексом неизвестного типа) переменные и удалить элемент массива через тотже индекс неопределенного пола поставив точку и написав четыре буквы free... компилятор сам определит что нужно удалить прокладку...
Palladin (2004-11-21 01:04:00) [11]и что? я спрашиваю какой массив а не что в нем содержится...
из статического ты ничего не удалишь, из динамического догадайся сам, нарисуй ситуацию на листочке... в помощь: можешь глянуть справку по Move
noob (2004-11-21 00:56:00) [12]to Defunct Задоронова насмотрелся?
... массив типа string
Defunct (2004-11-21 00:34:00) [13]> Как удалить i-тый елемент массива
Навестись в Far на файл с расширением .pas, в котором описан ваш массив, и нажать F8 потом enter.
YurikGL (2004-11-21 00:01:00) [14]В частном случае, если
mas[i]:array of TEdit
то удалить можно так
mas[i].free
Palladin (2004-11-20 22:51:00) [15]какого массива?