У меня есть два списка.Есть ли простой способ удалить элементы из массива?
char *name[] = {"RGS", "O", "NRGY", "SIG", "BML-O", "BHI", "KSU", "ORN"};
char *name_to_remove[] = {"RGS", "O", "NRGY"};
Есть ли эффективный способ взять список предметов и удалить его из другого списка? Я внедрил свою собственную версию, но считаю ее довольно неэффективной. Он в основном делает копию списка имен, а затем использует цикл вложенных циклов, который проходит через дублированное имя & name_to_remove списки и отмечает любой элемент, который повторяет «удалить». Наконец, я просматриваю список и копирую все элементы, кроме тех, у которых есть значения «remove». Это ужасно уродливо, и я подозреваю, что это неэффективно. Проблема, с которой у меня возникают проблемы (не рассматривали ее раньше), я не уверен, возможно ли удалить элемент из массива, если массив является фиксированным размером в памяти, поэтому я первоначально попытался изменить значения, а затем добавьте значения в новый массив (тот же размер, что и оригинал - размер массива элементов, которые я хочу удалить).
Я не вижу лучшего способа сделать это, memcmp казался многообещающим, потому что он может сравнивать два списка, но я не мог понять, как он подходит. Я знаю, C не Python, но вот как я это делаю чисто в питоне:
for item in name_to_remove:
name_copy.remove(item)
может быть, под сценой, команда питона делает столько петель, как я делаю, но я думал, что спросить.
как бы связанный список быть полезным здесь? – goat
@chris Потому что, если 'name' был связанным списком, вы можете просто освободить() узлы, которые необходимо удалить (и перевести« следующий »указатель предыдущего узла на следующий узел). Однако, стоит ли накладные расходы связанного списка, он полностью зависит от того, как часто вам нужно изменить (на полпути) список/массив. В зависимости от случая может быть лучшим выбором динамический массив или простой статический массив. – Will