Мне удалось получить предварительно скомпилированные заголовки, работающие под gcc однажды в прошлом, и я вспоминаю проблемы наличия тогда также. Вещь помнить состоит в том, что gcc проигнорирует файл (header.h.gch или подобный), если определенные условия не будут соблюдены, список которого может быть найден на , gcc обычно предварительно компилировал страницу .
документации заголовка, является самым безопасным иметь Вашу компиляцию системы сборки .gch файл как первый шаг с теми же параметрами командной строки и исполняемым файлом как остальная часть Вашего источника. Это гарантирует, что файл актуален и что нет никаких тонких различий.
Это - вероятно, также хорошая идея получить его работающий с изобретенным примером сначала, только удалить возможность, что Ваши проблемы характерны для исходного кода в Вашем проекте.
Вы пытаетесь удалить одно значение или все совпадающие значения?
Если вы пытаетесь удалить одно значение, как вы определяете значение, которое хотите удалить?
Причина, по которой вы не получаете обратно ключ при запросе по значениям, потому что словарь может содержать несколько ключей, связанных с указанным значением.
Если вы хотите удалить все совпадающие экземпляры одного и того же значения, вы можете сделать следующее:
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 ()
необходим для копирования значений в новую коллекцию. Если звонок не сделан,
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);
}
Просмотрите словарь, чтобы найти индекс, а затем удалите его.