В Glib 1.2 безопасно ли удалять элементы из хэш-таблицы при использовании g_hash_table_foreach?

#c #hashtable #glib

#c #хэш-таблица #glib

Вопрос:

При использовании GLib 1.2 GHashTable с g_hash_table_foreach() методом безопасно ли удалять элементы с помощью g_hash_table_remove() метода?

Я знаю, что Glib 2.0 предоставляет g_hash_table_foreach_steal() метод, но мы застряли с 1.2 для нашей сборки на работе.

Ответ №1:

Ну, это не разрешено в текущем API, поэтому я был бы очень удивлен, если бы такая функциональность была в 1.2.

Комментарии:

1. Это единственный способ сохранить отдельный список ключей и удалить их впоследствии? Это вообще не кажется очень чистым.

2. @brice: Это один из способов, и в нем нет ничего плохого. Другим способом было бы создать новую хэш-таблицу и добавить в нее пары ключ-значение, которые вы хотите сохранить по ходу работы. Затем в конце замените исходную хэш-таблицу на новую.

3. Спасибо за ответ и ваши последующие действия. Вы правы, конечно, нет ничего плохого в том, чтобы делать это в любом случае. Я думаю, что работа с языками более высокого уровня, такими как Python и Clojure, дала мне действительно ленивые привычки!