Выбор коллекции для данных - 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();
        }
    }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 4.143 из 5
Похожие ответы