![]() |
Модераторы: bsa |
![]() ![]() ![]() |
|
vovamakr |
|
|||
Новичок Профиль Группа: Участник Сообщений: 33 Регистрация: 2.11.2015 Репутация: нет Всего: нет |
Нужно удалить значение в ассоциативном массиве
Я так реализовал:
но не знаю правильно ли это, так как не могу понять как в меине это все вывести( |
|||
|
||||
xvr |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 35 Всего: 223 |
Ваш код делает непонятно что. Точнее понятно - что то удаляет, но явно не то, что хотелось. Подсказка - где у вас в удалении используется значение параметра key ? Ответ 'нигде' (как у вас и есть) явный признак неправильной реализации
![]() |
|||
|
||||
vovamakr |
|
|||
Новичок Профиль Группа: Участник Сообщений: 33 Регистрация: 2.11.2015 Репутация: нет Всего: нет |
xvr,
|
|||
|
||||
math64 |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 12 Всего: 72 |
||||
|
||||
vovamakr |
|
|||
Новичок Профиль Группа: Участник Сообщений: 33 Регистрация: 2.11.2015 Репутация: нет Всего: нет |
math64,
Это сообщение отредактировал(а) vovamakr - 5.11.2015, 15:43 |
|||
|
||||
math64 |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 12 Всего: 72 |
Так ты не все элементы сдвигаешь. Хотя можно не сдвигать, а оставить дырку. Но тогда нужно различать size (чмсло ненулевый элементов) и reservedSize (число выделенных элементов в массиве). Да ещё нужно не забыть delete.
Добавлено через 1 минуту и 20 секунд И еще: не array->entries[index]->key == key, а strcmp(array->entries[index]->key, key) == 0 Добавлено через 3 минуты и 4 секунды И копировать(если копировать) не только ключи, в всю запись - как было в первом варианте. |
|||
|
||||
feodorv |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 12 Всего: 45 |
Нет сдвига остальных записей после успешного сравнения ![]() А если встретятся в массиве два одинаковых значения key? -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
vovamakr |
|
|||
Новичок Профиль Группа: Участник Сообщений: 33 Регистрация: 2.11.2015 Репутация: нет Всего: нет |
feodorv,
|
|||
|
||||
feodorv |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 12 Всего: 45 |
Уже радует. Но цикл в цикле не очень хорошо выглядит. А Вам точно нужно удалять все значения key из массива, или только первое встретившееся? Добавлено через 1 минуту и 22 секунды И, всё-таки, копируйте всю структуру))) -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
vovamakr |
|
||||
Новичок Профиль Группа: Участник Сообщений: 33 Регистрация: 2.11.2015 Репутация: нет Всего: нет |
feodorv,
Добавлено @ 16:44 feodorv, я не знаю как сделать что бы цикл не был в цикле
Это сообщение отредактировал(а) vovamakr - 5.11.2015, 16:47 |
||||
|
|||||
feodorv |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 12 Всего: 45 |
Если Вам нужно удалить из списка первый же элемент с ключом key, то это можно сделать так:
Если же Вам нужно удалить все записи с ключом key, то можно ввести два индекса, чтобы обойтись одним циклом, но я так и не понял, что Вам в точности нужно. -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
vovamakr |
|
|||
Новичок Профиль Группа: Участник Сообщений: 33 Регистрация: 2.11.2015 Репутация: нет Всего: нет |
feodorv, getValue()?
int* GetValue(const AssociativeArray* array, const char* key) { for (unsigned index = 0; index < array->size; ++index) { AssociativeArray::Entry* entry = array->entries[index]; if (strcmp(entry->key, key) == 0) return entry->key; return nullptr; } Это сообщение отредактировал(а) vovamakr - 5.11.2015, 17:49 |
|||
|
||||
feodorv |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 12 Всего: 45 |
Да, забыл ![]() А у Вас entry->value имеет тип (int *)??? Или это как дополнительный индикатор, найдена ли запись с данным ключом или нет? Тогда
-------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
vovamakr |
|
||||
Новичок Профиль Группа: Участник Сообщений: 33 Регистрация: 2.11.2015 Репутация: нет Всего: нет |
feodorv,
Добавлено через 3 минуты и 50 секунд
|
||||
|
|||||
feodorv |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 12 Всего: 45 |
vovamakr,
![]()
-------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
![]() ![]() ![]() |
Правила форума "C/C++: Для новичков" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |