Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Удаление элемента из массива с его переиндексацией 
:(
    Опции темы
MoHaX
Дата 23.10.2006, 07:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 23.8.2006

Репутация: нет
Всего: нет



Помогите, пожалуйста, удалить элемент из одномерного массива с его переиндексацией. Массив НЕ динамический.
К примеру, дан массив s[1]=1, s[2]=2,s[3]=3. При удалении s[2]=2 я хочу получить массив s[1]=1, s[2]=3.
PM MAIL ICQ   Вверх
ivan219
Дата 23.10.2006, 07:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1121
Регистрация: 19.11.2005
Где: Планета земля

Репутация: 2
Всего: 12



Тебе надо два одинаковых массива:
Код

for X:=0 to High(Array1) do
 begin
  for X2:=0 to High(Array2) do
   begin
    if (Array1[X]<>0)and(Array2[X2]=0) then
     begin
      Array2[X2]:=Array1[X];
      Break;
     end;
   end;
 end;
Array1:=Copy(Array2);


Могут быть ошибки писал здесь.

Добавлено @ 08:12 
А можно и так:
Код

for X:=0 to High(Array1) do
 begin
  if X=High(Array1) then Break;
  if (Array1[X]=0)and(Array1[X+1]<>0) then
   begin
    Array1[X]:=Array1[X+1];
    Array1[X+1]:=0;
   end;
 end;


Это сообщение отредактировал(а) ivan219 - 23.10.2006, 08:03
PM MAIL ICQ   Вверх
ivan219
Дата 23.10.2006, 08:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1121
Регистрация: 19.11.2005
Где: Планета земля

Репутация: 2
Всего: 12



А интересно какой из способов быстрее smile

Добавлено @ 08:17 
Наверное так будет правильней:
Код

for X:=0 to High(Array1)-1 do
 begin
  if (Array1[X]=0)and(Array1[X+1]<>0) then
   begin
    Array1[X]:=Array1[X+1];
    Array1[X+1]:=0;
   end;
 end;


Это сообщение отредактировал(а) ivan219 - 23.10.2006, 08:19
PM MAIL ICQ   Вверх
MoHaX
Дата 23.10.2006, 08:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 23.8.2006

Репутация: нет
Всего: нет



Все дело в том, что мне бы надо обойтись как-нить без второго массива, так как элементы массива содержат кусок текста из нескольких предложений, так что надо быстрый  и простой способ без нового массива.
PM MAIL ICQ   Вверх
ivan219
Дата 23.10.2006, 08:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1121
Регистрация: 19.11.2005
Где: Планета земля

Репутация: 2
Всего: 12



Я второй код дал.

А что новый массив много места не займёт да и времени особо незатратится хотя....... если они огромные то имеет значение.
PM MAIL ICQ   Вверх
MoHaX
Дата 23.10.2006, 08:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 23.8.2006

Репутация: нет
Всего: нет



Лана, поставим вопрос по другому, есть ли функция, которая из массива удаляет элемент? то есть сокращает количество элементов массива на один?
PM MAIL ICQ   Вверх
Rennigth
Дата 23.10.2006, 09:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 21.6.2004
Где: Moscow

Репутация: 49
Всего: 76



Цитата(MoHaX @  23.10.2006,  08:48 Найти цитируемый пост)
Лана, поставим вопрос по другому, есть ли функция, которая из массива удаляет элемент? то есть сокращает количество элементов массива на один? 


Move + SetLength



--------------------
(* Honesta mors turpi vita potior *)
PM MAIL ICQ   Вверх
ivan219
Дата 23.10.2006, 09:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1121
Регистрация: 19.11.2005
Где: Планета земля

Репутация: 2
Всего: 12



Аааа во как надо а я и непонял smile 

Rennigth, она уделяет последний элемент или какой хош smile 
PM MAIL ICQ   Вверх
Rennigth
Дата 23.10.2006, 10:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 21.6.2004
Где: Moscow

Репутация: 49
Всего: 76



Цитата(ivan219 @  23.10.2006,  09:49 Найти цитируемый пост)
она
 ? кто она?


Цитата(ivan219 @  23.10.2006,  09:49 Найти цитируемый пост)
  

пример чего? как удалить элемент массива c SetLength  и Move?

Код

function RemoveItemDynArray(var VDynArray: TSomeObjectDynArray; AIndex: Integer): Integer;
var
  lLength: Integer;
begin
  lLength := Length(VDynArray);
  if (AIndex >= 0) and (AIndex < lLength) then
  begin
    if AIndex = lLength - 1 then
      SetLength(VDynArray, lLength - 1)
    else begin
      System.Move(VDynArray[AIndex + 1], VDynArray[AIndex],
        SizeOf(TSomeObject) * (lLength - AIndex - 1));
      SetLength(VDynArray, lLength - 1);
    end;
  end;
  Result := Length(VDynArray);
end;






Это сообщение отредактировал(а) Rennigth - 23.10.2006, 10:51


--------------------
(* Honesta mors turpi vita potior *)
PM MAIL ICQ   Вверх
Romikgy
Дата 23.10.2006, 10:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 26
Всего: 146



имхо 
Цитата(MoHaX @  23.10.2006,  06:28 Найти цитируемый пост)
Массив НЕ динамический

из такого массива элементы удалять нельзя!


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Rennigth
Дата 23.10.2006, 11:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1708
Регистрация: 21.6.2004
Где: Moscow

Репутация: 49
Всего: 76



Цитата(Romikgy @  23.10.2006,  10:55 Найти цитируемый пост)
НЕ динамический


Romikgy,  гы забыл... smile

Добавлено @ 11:08 
смутило вот это 
Цитата(MoHaX @  23.10.2006,  08:48 Найти цитируемый пост)
Лана, поставим вопрос по другому, есть ли функция, которая из массива удаляет элемент? то есть сокращает количество элементов массива на один? 




--------------------
(* Honesta mors turpi vita potior *)
PM MAIL ICQ   Вверх
ivan219
Дата 23.10.2006, 17:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1121
Регистрация: 19.11.2005
Где: Планета земля

Репутация: 2
Всего: 12



Цитата(Rennigth @  23.10.2006,  10:49 Найти цитируемый пост)
пример чего? как удалить элемент массива c SetLength  и Move?

Да.
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0516 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.