powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Синтаксический сахар с массивами
18 сообщений из 18, страница 1 из 1
Синтаксический сахар с массивами
    #40011242
Cobalt747
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Интересно хоть в каком-нить языке есть такой синтаксический сахар для массивов, как увеличить длину на 1 или n штук?
или задать значение последнего элемента?
или сразу - добавить в массив элемент в конец?
А то так пишешь код, пропускаешь "+1" и всё ломается (((

Код: pascal
1.
2.
              SetLength(ExtractKeys, Length(ExtractKeys) + 1);
              ExtractKeys[Length(ExtractKeys) - 1] := TempKey;
...
Рейтинг: 0 / 0
Синтаксический сахар с массивами
    #40011249
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нет. Это всё - только для векторов и списков. Которые только в дельфи почему-то называются
массивом.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Синтаксический сахар с массивами
    #40011258
Фотография X11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А если написать helper?
...
Рейтинг: 0 / 0
Синтаксический сахар с массивами
    #40011259
Zelius
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cobalt747,

Вообще, дельфёвый TList и TList<T> построены на массиве и делают как раз так хочется

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
  TPointerList = array of Pointer;

  TList = class(TObject)
  private
    FList: TPointerList;

procedure TList.SetCapacity(NewCapacity: Integer);
begin
  if NewCapacity < FCount then
    Error(@SListCapacityError, NewCapacity);
  if NewCapacity <> FCapacity then
  begin
    SetLength(FList, NewCapacity);
    FCapacity := NewCapacity;
  end;
end;

procedure TList.Grow;
var
  Delta: Integer;
begin
  if FCapacity > 64 then
    Delta := FCapacity div 4
  else
    if FCapacity > 8 then
      Delta := 16
    else
      Delta := 4;
  SetCapacity(FCapacity + Delta);
end;


function TList.Add(Item: Pointer): Integer;
begin
  Result := FCount;
  if Result = FCapacity then
    Grow;
  FList[Result] := Item;
  Inc(FCount);
  if (Item <> nil) and (ClassType <> TList) then
    Notify(Item, lnAdded);
end;

ExtractKeys.Add(TempKey);
...
Рейтинг: 0 / 0
Синтаксический сахар с массивами
    #40011263
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cobalt747,

В дельфях же есть сложение массивов:
Код: pascal
1.
2.
3.
4.
var bts : TBytes;
bts := [1,2,3,4,5];
bts := bts + [6,7,8,9];
bts := bts + [0];


Не самый эффективный способ, но сладкий.

Для получения индекса последнего элемента использовать High(), это избавит от -1.
...
Рейтинг: 0 / 0
Синтаксический сахар с массивами
    #40011285
Cobalt747
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kazantsev Alexey
Cobalt747,

В дельфях же есть сложение массивов:
Код: pascal
1.
2.
3.
4.
var bts : TBytes;
bts := [1,2,3,4,5];
bts := bts + [6,7,8,9];
bts := bts + [0];


Жаль, что в Д7 это не работает (((
...
Рейтинг: 0 / 0
Синтаксический сахар с массивами
    #40011286
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cobalt747,

Ну, High() там работать должно.
...
Рейтинг: 0 / 0
Синтаксический сахар с массивами
    #40011299
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
X11
А если написать helper?

То получится как-то так:

http://www.rgreat.ru/tmp/Delphi/Indexes.pas

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
var 
  X: TArrayEx<integer>;
begin
  X.Clear;
  X.Add(1);
  X.Add(2);
  X.Add(3);
end.
...
Рейтинг: 0 / 0
Синтаксический сахар с массивами
    #40011325
Фотография Квейд
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cobalt747
Интересно хоть в каком-нить языке есть такой синтаксический сахар для массивов, как увеличить длину на 1 или n штук?
или задать значение последнего элемента?
или сразу - добавить в массив элемент в конец?
А то так пишешь код, пропускаешь "+1" и всё ломается (((

Код: pascal
1.
2.
              SetLength(ExtractKeys, Length(ExtractKeys) + 1);
              ExtractKeys[Length(ExtractKeys) - 1] := TempKey;



Код: pascal
1.
ExtractKeys := ExtractKeys + [TempKey]

разве не работает в новых дельфях?
...
Рейтинг: 0 / 0
Синтаксический сахар с массивами
    #40011326
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Cobalt747
Интересно хоть в каком-нить языке есть такой синтаксический сахар для массивов, как увеличить длину на 1 или n штук?
или задать значение последнего элемента?
или сразу - добавить в массив элемент в конец?
А то так пишешь код, пропускаешь "+1" и всё ломается (((

Код: pascal
1.
2.
              SetLength(ExtractKeys, Length(ExtractKeys) + 1);
              ExtractKeys[Length(ExtractKeys) - 1] := TempKey;


1. Ага, C++.
Код: plaintext
1.
2.
3.
4.
	vector<int> ai(3); // Массив int из 3 элементов
	ai.resize(7); // Теперь размер 7 элементов
	ai.resize(ai.size() + 3); // Теперь размер 10 элементов
	ai.push_back(777); // Добавили в конец, размер стал 11.


2. В новых дельфях такое есть.
3. Вместо Length(ExtractKeys) - 1 используй High(ExtractKeys) .
4. Напиши свой класс-оболочку вокруг массива, и в нем реализуй все, что душе угодно. Библиотек с такими классами, кстати, уже целый вагон.
...
Рейтинг: 0 / 0
Синтаксический сахар с массивами
    #40011330
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Cobalt747
Жаль, что в Д7 это не работает (((

Используй библиотечку Fundamentals. Там массивы есть.
И "библиотечные" (которые реализованы как классы.
И масса методов для работы с динамическими массивами:


Код: pascal
1.
2.
3.
4.
5.
6.
7.
uses
  flcDynArrays;
...
  var
    fiA : IntegerArray;
begin
  DynArrayAppend(fiA, 777); // Добавление в конец.
...
Рейтинг: 0 / 0
Синтаксический сахар с массивами
    #40011457
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
топег любителей сахарка

ручками уже разучились писать и головой думать
...
Рейтинг: 0 / 0
Синтаксический сахар с массивами
    #40011460
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
defecator,

Cobalt747
...пишешь код, пропускаешь "+1" и всё ломается (((
...
Рейтинг: 0 / 0
Синтаксический сахар с массивами
    #40011508
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я вот такой сахарок юзаю, удобно:
https://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1318775&msg=22009381
...
Рейтинг: 0 / 0
Синтаксический сахар с массивами
    #40011527
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
makhaon,

d7 же.
...
Рейтинг: 0 / 0
Синтаксический сахар с массивами
    #40011538
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ъъъъъ,

печально тогда )
...
Рейтинг: 0 / 0
Синтаксический сахар с массивами
    #40011577
Sapersky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Для старых Дельфей можно написать типо-независимые функции через Typeinfo. Что-то такое:
Код: pascal
1.
2.
3.
4.
5.
6.
Type
  TExtractKeyArr = array of TExtractKey;
Var
  ExtractKeys : TExtractKeyArr;
begin
Arr_AddItem(ExtractKeys, TypeInfo(TExtractKeyArr), @TempKey);

Писать может и не меньше из-за объявлений типа, но хотя бы ошибок с индексами не будет.
...
Рейтинг: 0 / 0
Синтаксический сахар с массивами
    #40011626
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cobalt747
Интересно хоть в каком-нить языке есть такой синтаксический сахар для массивов, как увеличить длину на 1 или n штук?

Завидуй.

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
SQL> declare
  2      type t_arr is varray(1000) of varchar2(20) not null;
  3      arr t_arr := t_arr('Vasya', 'Petya');
  4  begin
  5      dbms_output.put_line('len = ' || arr.count);
  6      dbms_output.put_line('arr(1) = ' || arr(1));
  7      dbms_output.put_line('arr(2) = ' || arr(2));
  8      arr.extend;
  9      arr(arr.last) := 'Kolya';
 10      dbms_output.put_line('len = ' || arr.count || ', arr(3) = ' || arr(3));
 11      arr.extend;
 12      arr(arr.last) := 'Masha';
 13      dbms_output.put_line('len = ' || arr.count || ', arr(4) = ' || arr(4));
 14      arr.extend(20);
 15      arr(arr.last) := 'Cobalt747';
 16      dbms_output.put_line('len = ' || arr.count || ', arr(' || arr.last || ') = ' || arr(arr.last));
 17  end;
 18  /

len = 2
arr(1) = Vasya
arr(2) = Petya
len = 3, arr(3) = Kolya
len = 4, arr(4) = Masha
len = 24, arr(24) = Cobalt747

PL/SQL procedure successfully completed



Cobalt747
А то так пишешь код, пропускаешь "+1" и всё ломается

Ты лучше вместо +1 пиши -1, ещё интереснее будет.
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Синтаксический сахар с массивами
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]