Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.219.63.90] |
|
Сообщ.
#1
,
|
|
|
Работаю сейчас в delphi, до этого работала в JS. В js есть функция slpice которая удаляет элементы массива, в статьях по delphi я не нашла этой функции. Предположим мне нужно удалить массив (ниже приведен пример с JS).
Цитата var pts = [2,3,4,5,6,7,8,9]; pts.splice(0, pts.length); Как я могу это сделать в delphi7? |
Сообщ.
#2
,
|
|
|
Array.prototype.splice() Сводка Метод splice() изменяет содержимое массива, удаляя существующие элементы и/или добавляя новые. Синтаксис array.splice(start[, deleteCount[, item1[, item2[, ...]]]]) Параметры start Индекс, по которому начинает изменять массив. Если больше длины массива, реальный индекс будет установлен на длину массива. Если отрицателен, указывает индекс элемента с конца. Если коротко, то "элементы массива не удаляют" (на сколько мне не изменяет память), а "заполняют, присваивают значения". В динамических массивах можно назначать длину массива. Можно лишь заполнить в цикле например нулевыми значениями (любыми другими). Массивы Удаление, добавление -> относится к спискам. Списки Возможно, Вам дадут более квалифицированный ответ |
Сообщ.
#3
,
|
|
|
Как таковой встроенной функции для массивов нет.
А устроена она так: Создать новый пустой массив итоговой длины Скопировать кусок до удаляемого фрагмента через Move Скопировать кусок после удаляемого фрагмента через Move Вернуть новый массив Будут нюансы для динамических элементов (строки, интерфейсы, дин. массивы, записи с полями этих типов) |
Сообщ.
#4
,
|
|
|
Fr0sT, может вы подскажите как это правильно сделать? Вот мой код сделанный по вашей инструкции.
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs; type arr = array of Integer; TForm1 = class(TForm) procedure FormShow(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; // arr:Array[0..10] of Integer; implementation {$R *.dfm} procedure TForm1.FormShow(Sender: TObject); var i,Cuted,Len:Integer; M:arr; s:String; begin Len:=20; SetLength(M,Len); Len:=Length(M); for i := 1 to 9 do begin M[i] := i+1; end; Move(M[0],M[5],10); SetLength(M,0); //Удаление Move(M[0],M[5],10); end; end. |
Сообщ.
#5
,
|
|
|
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type arrI = array of Integer; type TForm1 = class(TForm) Button1: TButton; Button2: TButton; procedure Button2Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation procedure TForm1.Button2Click(Sender: TObject); var i:integer; M:arrI; M2:arrI; s:string; begin s:=''; SetLength(M,9); SetLength(M2,9); for i := 1 to 9 do M[i] := i+1; for i := 1 to 9 do S:=S+' '+intToStr(M[i]); ShowMessage( 'M is '+ S ); Move(M[1],M2[5],4); // из 1 в 5 размер 4 байта SetLength(M,0);//удален ShowMessage( 'Length of M is '+intToStr(Length(M)) ); S:=''; for i := 1 to 9 do S:=S+' '+intToStr(M2[i]); SetLength(M2,0);//удален ShowMessage( 'M2 is '+ S ); end; |