Удаление лемента массива без перебора всего массива делфи

Тема в разделе "ASM, С/С++, Delphi, Java", создана пользователем Bicdibus, 28 авг 2017.

  1. Bicdibus

    Bicdibus

    Регистр.:
    5 мар 2010
    Сообщения:
    498
    Симпатии:
    7
    Есть массив состоящий из примерно 100к елементов типа стринг прога в рандомном порядке берет из него елементы, поле того как елемент считан его надо удалить, так чтоб пи повторной выборке он не попал в переменную. Можно зделать перебором массива но он большого обьема и будет тормозить сильно. Может есть какие функции для этого, гугление не помогло.
     
  2. starwanderer

    starwanderer Нарушитель

    Регистр.:
    20 ноя 2016
    Сообщения:
    1.286
    Симпатии:
    2.862
    Если это практическая задача, и нужно получить случайную выборку из массива без его сохранения, то , как вариант, задачу проще решить алгоритмически. После выборки элемента, менять его значение на значение последнего элемента массива. После чего уменьшать диапазон генерации индекса случайного элемента на единицу.
    Фактически , после каждой итерации размер массива уменьшается на один элемент.
    Если в задаче не выставлено других условий, то это самое оптимальное по скорости обработки решение.
     
    Последнее редактирование: 28 авг 2017
    latteo и Bicdibus нравится это.
  3. bugmenot123

    bugmenot123 Писатель

    Заблокирован
    Регистр.:
    16 мар 2017
    Сообщения:
    8
    Симпатии:
    0
    You should use HashTable instead of Array.
    HashTable is perfect for accessing elements without traversing the elements , the performance is 0(1)
     
  4. Deni7ST

    Deni7ST Писатель

    Регистр.:
    25 ноя 2016
    Сообщения:
    2
    Симпатии:
    0
    При такой постановке задачи другого решения нет.
     
  5. Цуиьфыеук

    Цуиьфыеук Создатель

    Регистр.:
    15 янв 2018
    Сообщения:
    37
    Симпатии:
    19
    Еще можно попробовать собрать случайный набор ключей без повтора: с числами работа пойдет быстрее чем со строками. А потом сделать выбор значений по ключам.