Выбор коллекции для данных - C#
Формулировка задачи:
Ребята, никак не могу подобрать коллекцию для хранения данных, чтобы (все надо одновременно):
- значения должны быть уникальны (можно Dictionary? или Set?)
- значения должны извлекаться в определенном порядке - (соответственно лучше хранить их отсортированными в этом порядке, так?) - но отсортированы не по ключу, а по одному из критериев внутри value (SortedDictionary отпадает)
- значения нужно добавлять по одному.
- нужен доступ к произвольным значениям, по ключу или по индексу.
Например: люди уникальны по фамилии, но отсортированы по росту.
Пока написала я массив, который вручную сортирую, и при добавлении элемента перезаписываю поэлементно. Но это же извращение. Хочется чего-то эффективного и красивого.
Спасибо!
Решение задачи: «Выбор коллекции для данных»
textual
Листинг программы
public class Test : IEnumerable<TestAnswer> { public string Title { get; private set; } public DateTimeOffset Date { get; private set; } private SortedSet<TestAnswer> _answers2 = new SortedSet<TestAnswer>(new ByComplexity()); // comparer by complexity public class ByComplexity : IComparer<TestAnswer> { public int Compare(TestAnswer x, TestAnswer y) { return x.Question.Complexity.CompareTo(y.Question.Complexity); } } public int ItemsCount2 { get { return _answers2.Count; } } public Test(string title, DateTimeOffset date, TestAnswer[] answers) : this(title, date) { foreach (var x in answers) { _answers2.Add(x); } } public Test(string title, DateTimeOffset date) { Title = title; Date = date; } public void AddItem(TestAnswer answer) { _answers2.Add(answer); } public TestAnswer GetItem(int id) { return _answers2.First(x => x.Question.Id == id); } public IEnumerator<TestAnswer> GetEnumerator() { foreach (var s in _answers2) { yield return s; } } // non generic IEnumerator IEnumerable.GetEnumerator() { return GetEnumerator(); } public override string ToString() { StringBuilder result = new StringBuilder(); result.AppendLine(Title); result.AppendLine(Date.ToString()); result.AppendLine(ItemsCount2.ToString()); foreach (var x in _answers2) { if (x != null) { result.AppendLine(x.ToString()); } } return result.ToString(); } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д