Помимо очевидной точки принятия решения о том или не нужно, чтобы иметь возможность индексировать во внешнюю коллекцию по некоторым критериям (как словарь будет обеспечивать) - это всего лишь количество информации, необходимой вам для каждого внешнего элемента.
На одном конце спектра каждый внешний элемент не имеет связанных с ним метаданных. Каждый элемент во внешнем списке представляет собой только коллекцию, и нет никакой идентифицирующей информации. Если, например, вы сгруппировали список учеников по тому месту, в котором они жили, по мере того, как вы повторяли списки, вы бы знали, что вся эта группа студентов принадлежит к одному общежитию, но вы не знаете, какое общежитие, которое основано исключительно в списке списков.
Середина спектра - словарь с примитивным ключом. Теперь у вас есть информация о каждом вложенном списке, KeyValuePair Key. Этот ключ может быть своего рода уникальным идентификатором, определяющим общежитие.
Другой конец спектра - это неограниченные метаданные. Вы определяете класс для элементов во внешнем списке, и свойство этого элемента является коллекция:
class Dorm {
public int DormID {get;set;}
public string DormName {get;set;}
public Gender DormPermittedGender {get;set;}
public List<Person> Students {get;set;}
}
class Person {
public string Name {get;set;}
public Gender Gender {get;set;}
public int Age{get;set;}
}
///...
List<Dorm> dorms = db.Dorms.Select(d=>
new Dorm {
DormId = d.Id,
DormName = d.Name,
DormPermittedGender = d.PermittedGender,
Students = d.StudentsResiding
}
)
foreach(Dorm dorm in dorms)
{
foreach(Person student in dorm.Students)
{
Console.Writeline(student.Name + " lives in " + dorm.DormName);
}
}
Обратите внимание, как читаемым, что Еогеасп есть. Никаких таинственных ключей.
Теперь словарь действительно способен на это, поскольку у вас могут быть сложные объекты как Ключ, но он не такой организованный. Если ситуация требует этого, строго типизированные объекты лучше отражают отношения.
Чрезмерное использование списка списков или словарей может затруднить чтение кода, так как нет имен, описывающих свойства. Вы сталкиваетесь с каким-то старым кодом, и вам нужно прыгать, чтобы найти, где Словарь был впервые назначен для определения значения ключа, потому что все, что у вас есть, это тип int
, который не передает семантики.
Словарь, вероятно, путь. Как вы их группируете (т. Е. Может быть проще сказать, если вы дадите нам структуру ваших объектов)? –
* Предполагаемое использование для возвращаемого объекта должно отображаться в группах с использованием оператора For Each. * Вам нужно будет иметь дело с группировкой элементов? Или они уже возвращаются сгруппированными? –
Если вам нужно получить доступ к определенной коллекции в любое время, я бы рекомендовал словарь, если нет, вам не нужно иметь ключ, а коллекция коллекций будет достаточно – Sidewinder94