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

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

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


Донат для форума - использовать для поднятия настроения себе и модераторам

А ещё здесь можно купить рекламу за 25 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru

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

Привет!

Код:
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 в 16:01. Причина: fix
bilibian вне форума   Ответить с цитированием
Старый 21.11.2015, 16:20   #2
tsar_
Форумчанин
 
Аватар для tsar_
 
Регистрация: 06.01.2011
Адрес: Украина, г.Харьков
Сообщений: 365
Репутация: 465
По умолчанию

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

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

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

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

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

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

В зависимости от ситуации, можно использовать дженерики.
Или вот это
SQLPowerUser вне форума   Ответить с цитированием
Старый 22.11.2015, 00:29   #9
Аватар
Модератор
Заслуженный модератор
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Адрес: Северодонецк.ua
Сообщений: 18,998
Репутация: 6725
По умолчанию

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

skype: forwardbiznes
По умолчанию

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

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

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


03:43.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.