Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.08.2010, 12:39   #11
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Всем спасибо, но мне ближе вариант от Alex Cones. Кому интересно, есть еще вариант с while вместо for, тогда приращение индексов нужно проводить только в случае если элемент удалять не надо.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 10.08.2010, 12:51   #12
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Хм... Я лично предпочитаю путь дольше но надежнее.
Вместо массива использовать TObjectList. Массив обьектов, которые имеют поле уникального индекса и собственно значения.
Если мне нужно удалить какой-то элемент то сместятся индексы только в ObjectList, но уникальные ключи в самих обьектах останутся неизменными, именно по ним и делать поиск.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 10.08.2010, 12:54   #13
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Примерно так и есть. Только я хеши делал вручную. Сначала есть хеши для строк (они хранятся в единственном экземпляре, даже если в массивах будет много дубликатов), потом есть хеши для элементов структур (потому что здесь рассматривается динамический массив динамических массивов) и только потом уже есть хеши именно для данного массива - самый верхний уровень. Здесь же интересно именно физическое удаление элементов из массива.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика

Последний раз редактировалось Utkin; 10.08.2010 в 13:02.
Utkin вне форума Ответить с цитированием
Старый 11.08.2010, 05:23   #14
igh0st
Форумчанин
 
Аватар для igh0st
 
Регистрация: 05.07.2010
Сообщений: 136
По умолчанию

Чтобы при удалении не бился индекс элементы можно удалять с конца в обратном цикле.
igh0st вне форума Ответить с цитированием
Старый 11.08.2010, 06:53   #15
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Цитата:
Сообщение от igh0st Посмотреть сообщение
Чтобы при удалении не бился индекс элементы можно удалять с конца в обратном цикле.
Да спасибо, я так и сделал. Мне уже предложил такой вариант Alex Cones.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 11.08.2010, 07:59   #16
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
можно удалять с конца в обратном цикле.
Что-то я недопонял, а если я хочу удалить элемент в районе середины, все кто стоит после него индексы то сбивают...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 11.08.2010, 08:13   #17
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Что-то я недопонял, а если я хочу удалить элемент в районе середины, все кто стоит после него индексы то сбивают...
Именно в этом и была загвоздка. Если просматривать динамический массив сначала то так и есть. А если с конца то всем плевать.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 11.08.2010, 19:24   #18
chertovich
Форумчанин
 
Аватар для chertovich
 
Регистрация: 26.07.2009
Сообщений: 489
По умолчанию

Чтобы удалить какой-нибудь элемент, необходимо следующиее за ним элементы "сдвинуть" на один элемент влево.
Лучше всю эту работу разбить на функции и процедуры, хорошенько обдумать, и сделать! Если нужна моя помощь погу помочь после того, когда напишить четкое задание....
Если в глубине души вы программист, то, следуя своим наклонностям, вы захотите написать кусок кода.
chertovich вне форума Ответить с цитированием
Старый 11.08.2010, 19:29   #19
chertovich
Форумчанин
 
Аватар для chertovich
 
Регистрация: 26.07.2009
Сообщений: 489
По умолчанию

Цитата:
Сообщение от Utkin Посмотреть сообщение
С жары чего-то не догоню .
Смысл в следующем. Имеется список значений. Элементы с этими значениями (не индексами) должны быть удалены. Функция поиск индекса массива по значению есть.

ЗЫ. Массив динамический

-----ДОБАВЛЕНО:------------------

Пример.
Имеется два массива:
А[1]:='ааа';
А[2]:='ааб';
А[3]:='аав';
А[4]:='ааг';
А[5]:='аап';
А[6]:='аар';
А[7]:='аао';
А[8]:='аал';

и
B[1]:='ффф';
B[2]:='ааа';
B[3]:='аап';

В результате работы этой функции в массиве A должны остаться только элементы 'aaa' и 'аап'
А вообще-то что здесь делать? Перебираешь циклом массив и если элемент найден то не добавляем, иначе добавляем.... Проще этого, наверное, сходить посцать...
Если в глубине души вы программист, то, следуя своим наклонностям, вы захотите написать кусок кода.
chertovich вне форума Ответить с цитированием
Старый 11.08.2010, 19:48   #20
chertovich
Форумчанин
 
Аватар для chertovich
 
Регистрация: 26.07.2009
Сообщений: 489
По умолчанию

Код:
unit ChildWin;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  A: array of String;
  B: array of String;

procedure GetMassiv(Element: String);

implementation

{$R *.dfm}

procedure GetMassiv(Element: String);
var
  I: Integer;
begin
  SetLength(B, 0);
  for I := Low(A) to High(A) do
  begin
    if A[I] = Element then
    else
      begin
        SetLength(B, Length(B) + 1);
        B[High(B)] := A[I];
      end;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  GetMassiv('abc');
end;

end.
Вот код, но я его не проверял
Если в глубине души вы программист, то, следуя своим наклонностям, вы захотите написать кусок кода.
chertovich вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Удаление и перемещение элементов массива в паскале Devilman Помощь студентам 4 21.04.2010 15:17
Удаление элементов из массива Jasper92 Общие вопросы C/C++ 3 06.03.2010 13:04
Удаление, сортировка элементов массива. Vadim123456 Помощь студентам 8 14.02.2010 23:43
удаление одинаковых элементов из массива sauron99 Общие вопросы Delphi 6 15.04.2009 21:27
Удаление элементов из динамического массива dashulka Общие вопросы Delphi 4 31.10.2008 14:03