На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
[!] Как относитесь к модерированию на этом форуме? Выскажите свое мнение здесь
  
> TList: как избежать дублирования элементов? , Win7, XE7
    Наполняю объект TList структурами:
    ExpandedWrap disabled
      struct TSTR
      {
        UnicodeString Name;
        double DB;
        double DE;
        double Val;
      };
      ...
      TList *MyList = new TList();
      TSTR *pv;
      ...
      MyList->Add(new TSTR);
      pv = (TSTR*)(MyList->Items[MyList->Count - 1]);
      pv->Name = ...;
      pv->DB = ...;
      pv->DE = ...;
      pv->Val   = ...;
      ...

    Как избежать попадание в TList структур с одинаковыми элементами, либо после заполнения его быстро удалить дубликаты?
    Может, есть быстрые методы для этого - типа IndexOf или Duplicates в TStringList?
    Спасибо.
    Сообщение отредактировано: vlad2 -
      Если вкратце, то - никак.
      А если чуть подробнее, то наиболее оптимальный способ, вроде бы, таков:
      1. Придумываем правило сортировки структуры.
      2. При каждом добавлении элемента, сравниваем его со всеми в поисках дубликата.
      3. При непопадании в дубль аккуратно вставляем новый на нужное место.

      Почему оптимальный: время, затрачиваемое на анализ одного элемента, будет всё же небольшим, что положительно скажется на внешней видимости РВ (реального времени). Если же так не делать, а, скажем, проводить поиск дублей каждые 100, 1000, ... включений, то хоть это и может оказаться в сумме быстрее тех первых 'каждовключенческих', но провалы по скорости будут весьма раздражительны.

      Простыми словами: лучше стабильные 20 кадров/секунду, чем непонятное 'бросалово' от 5 до 60 кадров/секунду. :blush:
        Цитата Славян @
        Если вкратце, то - никак.

        Видимо, придётся ручками. Может, есть WinAPI-шные функции :scratch:
        0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
        0 пользователей:


        Рейтинг@Mail.ru
        [ Script execution time: 0,0262 ]   [ 16 queries used ]   [ Generated: 1.03.24, 11:12 GMT ]