Удалите Объект в Словаре на основе Значения

Мне удалось получить предварительно скомпилированные заголовки, работающие под gcc однажды в прошлом, и я вспоминаю проблемы наличия тогда также. Вещь помнить состоит в том, что gcc проигнорирует файл (header.h.gch или подобный), если определенные условия не будут соблюдены, список которого может быть найден на , gcc обычно предварительно компилировал страницу .

документации заголовка, является самым безопасным иметь Вашу компиляцию системы сборки .gch файл как первый шаг с теми же параметрами командной строки и исполняемым файлом как остальная часть Вашего источника. Это гарантирует, что файл актуален и что нет никаких тонких различий.

Это - вероятно, также хорошая идея получить его работающий с изобретенным примером сначала, только удалить возможность, что Ваши проблемы характерны для исходного кода в Вашем проекте.

52
задан leppie 18 September 2014 в 21:32
поделиться

3 ответа

Вы пытаетесь удалить одно значение или все совпадающие значения?

Если вы пытаетесь удалить одно значение, как вы определяете значение, которое хотите удалить?

Причина, по которой вы не получаете обратно ключ при запросе по значениям, потому что словарь может содержать несколько ключей, связанных с указанным значением.

Если вы хотите удалить все совпадающие экземпляры одного и того же значения, вы можете сделать следующее:

foreach(var item in dic.Where(kvp => kvp.Value == value).ToList())
{
    dic.Remove(item.Key);
}

И если вы хотите удалить первый совпадающий экземпляр , вы можете запросить, чтобы найти первый элемент и просто удалить его:

var item = dic.First(kvp => kvp.Value == value);

dic.Remove(item.Key);

Примечание: Вызов ToList () необходим для копирования значений в новую коллекцию. Если звонок не сделан,

118
ответ дан 7 November 2019 в 09:10
поделиться
Dictionary<string, string> source
//
//functional programming - do not modify state - only create new state
Dictionary<string, string> result = source
  .Where(kvp => string.Compare(kvp.Value, "two", true) != 0)
  .ToDictionary(kvp => kvp.Key, kvp => kvp.Value)
//
// or you could modify state
List<string> keys = source
  .Where(kvp => string.Compare(kvp.Value, "two", true) == 0)
  .Select(kvp => kvp.Key)
  .ToList();

foreach(string theKey in keys)
{
  source.Remove(theKey);
}
7
ответ дан 7 November 2019 в 09:10
поделиться

Просмотрите словарь, чтобы найти индекс, а затем удалите его.

2
ответ дан 7 November 2019 в 09:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: