Форум программистов
 
О проблемах, например, с регистрацией пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль.

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

Восстановить пароль
Повторная активизация e-mail


Ответ
 
Опции темы
Старый 21.11.2015, 14:36   #1
bilibian
Форумчанин
 
Регистрация: 21.01.2014
Сообщений: 389
По умолчанию Как удалить элемент списка по его имени?

Привет!

Код:
procedure TForm1.btn1Click(Sender: TObject);
  var
    List : TStringList;
    I : Integer;
begin
  List := TStringList.Create;
  List.Clear;
  List.Add('abc=123');
  List.Add('ddd=456');

  for I := List.Count-1 downto 0 do
    if List.Names[I] = 'abc' then List.Delete(I);

  List.Free;
end;
Можно ли удалить элемент списка по его имени, а не по id? В данном случае имя это "abc".


Поясню, для чего мне это нужно:

Список может быть очень большим, и считаю, что не стоит каждый раз крутить его в цикле, чтобы удалить один элемент по его id. Это может быть очень долго.

Возможно есть вариант, где вместо id можно указать имя.

Примерно так:

Код:
for I := 0 to List.Count-1 do
    if List.Names[I] = 'abc' then List.Delete('abc');
Поможете?

Последний раз редактировалось bilibian; 21.11.2015 в 15:01. Причина: fix
bilibian вне форума Ответить с цитированием
Старый 21.11.2015, 15:20   #2
tsar_
Форумчанин
 
Аватар для tsar_
 
Регистрация: 06.01.2011
Сообщений: 368
По умолчанию

Список сортированный?
Программирую по необходимости
tsar_ вне форума Ответить с цитированием
Старый 21.11.2015, 15:23   #3
bilibian
Форумчанин
 
Регистрация: 21.01.2014
Сообщений: 389
По умолчанию

Цитата:
Сообщение от tsar_ Посмотреть сообщение
Список сортированный?
Нет. Сортировка, в моем случае, особой роли не играет.
bilibian вне форума Ответить с цитированием
Старый 21.11.2015, 15:30   #4
tsar_
Форумчанин
 
Аватар для tsar_
 
Регистрация: 06.01.2011
Сообщений: 368
По умолчанию

Если правильно помню, у TStringList есть метод IndexOfName
Программирую по необходимости
tsar_ вне форума Ответить с цитированием
Старый 21.11.2015, 15:43   #5
bilibian
Форумчанин
 
Регистрация: 21.01.2014
Сообщений: 389
По умолчанию

Цитата:
Сообщение от tsar_ Посмотреть сообщение
Если правильно помню, у TStringList есть метод IndexOfName
То что нужно, спасибо!
bilibian вне форума Ответить с цитированием
Старый 21.11.2015, 15:53   #6
tsar_
Форумчанин
 
Аватар для tsar_
 
Регистрация: 06.01.2011
Сообщений: 368
По умолчанию

Нету под рукой компилятора, так что посмотрите реализацию IndexOfName в delphi, скорее всего он тоже тупо перебирает элементы списка и сравнивает Name.
Это я к тому, что проблему скорости поиска в несортированном списке этот метод не решит.
Программирую по необходимости
tsar_ вне форума Ответить с цитированием
Старый 21.11.2015, 15:59   #7
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,061
По умолчанию

Цитата:
То что нужно
А IndexOfName думаешь как ищет? Также тривиально - в цикле перебором
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 21.11.2015, 22:43   #8
SQLPowerUser
Форумчанин
 
Аватар для SQLPowerUser
 
Регистрация: 19.01.2015
Сообщений: 158
По умолчанию

В зависимости от ситуации, можно использовать дженерики.
Или вот это
SQLPowerUser вне форума Ответить с цитированием
Старый 21.11.2015, 23:29   #9
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,061
По умолчанию

И StringList отсортировать будет искать не менее быстро
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 22.11.2015, 09:02   #10
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,978
По умолчанию

Если ключ уникален, можно применить конструкцию "ключ=значение". Немножко быстрее ищет чем простым сравнением фрагмента строки.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Ответ

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
С,С++, как удалить элемент списка? Алексей_2012 Помощь студентам 5 11.06.2015 10:38
удалить последний элемент из списка.ООП-Классы Otar4ik Помощь студентам 1 02.02.2014 21:36
Удалить элемент списка KatCH Общие вопросы по Java, Java SE, Kotlin 7 01.02.2013 15:13
Как создать элемент заранее определенного имени. dampirik Общие вопросы .NET 4 25.04.2010 17:05
помогите удалить элемент из связанного списка kermit Помощь студентам 5 13.06.2008 09:14


Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru
Пеллетный котёл Emtas
котлы EMTAS