C ++, почему std :: string намного медленнее, чем C string

Создайте метод расширения, который скопирует значения из вашего регистра, чувствительного к регистру, в новый словарь, нечувствительный к регистру.

public static Dictionary<string, T> ToCaseInsensitive<T>(this Dictionary<string, T> caseSensitiveDictionary)
{
    var caseInsensitiveDictionary = new Dictionary<string, T>(StringComparer.OrdinalIgnoreCase);
    caseSensitiveDictionary.Keys.ToList()
        .ForEach(k => caseInsensitiveDictionary[k] = caseSensitiveDictionary[k]);

    return caseInsensitiveDictionary;
}

Использование:

var newDictionary = JsonConvert.DeserializeObject<Dictionary<string, string>>(value)
.ToCaseInsensitive();

Хотя это работает для меня (и мне нравится это решение из-за его простоты), обратите внимание на следующие оговорки:

  • Есть незначительные накладные расходы, вызванные копированием
  • Если у вас есть дублировать ключи в словаре (например, «cat» и «CAT»), один будет перезаписан. Вы можете легко адаптировать метод для исключения исключений в таких случаях (если хотите).
  • Мое решение не использует строгое сравнение во время десериализации, но, скорее всего, это самый простой способ получить словарь в нечувствительное к регистру состояние.
-10
задан Alexander Maximov 4 August 2017 в 13:20
поделиться