C# - Dictionary‹int, Dictionary‹int, string›› сортировка выдает System.ArgumentException

У меня есть несортированный Dictionary<int, Dictionary<int, string>>, и при попытке отсортировать ключи его значений его выброс System.ArgumentException: At least one object must implement IComparable. Ниже приведена функция:

private static Dictionary<int, Dictionary<int, string>> SortDictionary(Dictionary<int, Dictionary<int, string>> unSortedDict)
{
      var sortedDict = (unSortedDict.OrderBy(entry => entry.Value.Keys)).ToDictionary(pair => pair.Key, pair => pair.Value);

      return sortedDict;
}

Я прикрепляю снимок экрана с данными ниже, где вы можете видеть несортированные ключи, чтобы у вас было представление о том, чего я пытаюсь достичь, возможно, я делаю что-то не так, и мне нужно ваше руководство, спасибо

введите здесь описание изображения


person Community    schedule 04.10.2012    source источник
comment
Мне нужны очки получше, чтобы прочитать текст на этом скриншоте...   -  person Brian Rasmussen    schedule 04.10.2012


Ответы (1)


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

При этом ошибка возникает из-за того, что вы пытаетесь вызвать OrderBy с KeyCollection , который не является сортируемым типом.

Вы можете рассмотреть другую коллекцию, например SortedDictionary<T,U>. Однако для этого потребуется написать собственный компаратор для поддержания сортировки.

person Reed Copsey    schedule 04.10.2012
comment
Однако есть SortedDictionary, который может удовлетворить ваши потребности. - person Servy; 04.10.2012