У меня есть метод, который получает IDictionary как параметр. Теперь я хочу предоставить метод, который извлекает значение из этого словаря, но он должен быть случайным.Преобразование IDictionary <строка, строка> в нижний регистр (C#)
Так что мое решение это прямо сейчас должен был иметь статическую функцию, которая перебирает ключи и преобразует их TOLOWER(), как это:
private static IDictionary<ILanguage, IDictionary<string, string>> ConvertKeysToLowerCase(
IDictionary<ILanguage, IDictionary<string, string>> dictionaries)
{
IDictionary<ILanguage, IDictionary<string, string>> resultingConvertedDictionaries
= new Dictionary<ILanguage, IDictionary<string, string>>();
foreach(ILanguage keyLanguage in dictionaries.Keys)
{
IDictionary<string, string> convertedDictionatry = new Dictionary<string, string>();
foreach(string key in dictionaries[keyLanguage].Keys)
{
convertedDictionatry.Add(key.ToLower(), dictionaries[keyLanguage][key]);
}
resultingConvertedDictionaries.Add(keyLanguage, convertedDictionatry);
}
return resultingConvertedDictionaries;
}
Теперь, это нормально, но все равно это очень огромный кусок кода, который противоречит моей идее «чистой и эффективной». Знаете ли вы какие-либо альтернативы этому, чтобы метод .ContainsKey() словаря не различал оболочку?
Спасибо! Это сработало, но мне все равно нужно просмотреть словарь языка Java и добавить словарь вручную. Никоим образом я не могу избавиться от этого? –
Tigraine
2008-10-02 10:09:10
Не то, чтобы я сразу подумаю. Это всего лишь одна петля, хотя ... вряд ли нечитаема. Если вы используете .NET 3.5, вы могли бы оптимизировать его * немного * бит, но я бы не потел его. Можете ли вы изменить создателя исходного словаря, чтобы в первую очередь указать нечувствительный к регистру компаратор? – 2008-10-02 10:18:21