С новейшим выпуском .NET Framework версии 4.0, в библиотеке классов появилась новая коллекция в System.Collections.Generic — SortedSet<T>.
Две главные особенности SortedSet<T>:
Чтобы было понятнее, давайте пройдём тесты, которые я сделал.
Тест 1: Создание SortedSet и печать всех его элементов (стандартная демонстрация поведения)
Результат: 1 2 3 5 9 11 21 44
Здесь мы можем заметить первую вышеупомянутую особенность. Число 9 дважды появляется в SortedSet, но в результате возвращается только один раз.
Тест 2: Посмотреть числа в диапозоне элементов.
Результат: 5 9 11
В тесте 2 можно увидеть, что это довольно полезный метод, который может использоваться, чтобы найти все числа между заданными нижним и верхним значениями. В нашем тесте 5 — нижнее, и 20 — верхнее значение.
Тест 3: Операции разности, объединения и пересечения в SortedSet
Результат: Разность: 1 2 3 5 9 44; Объединение: 1 2 3 5 9 11 21 44 7 22 25 30; Пересечение: 11 21;
В тесте 3 у нас есть два SortedSet. Используя вышеуказанные методы, мы выполняем различные операции.
Есть некоторые более полезные методы, такие как
sortedSet1.UnionWith(sortedSet2);
который навсегда сольёт два SortedSet, исключая повторяющиеся элементы.
Test 4: Удаление элементов используя Remove(int) и RemoveWhere(Predicate)
Результат: Без элемента номер 5: 1 2 3 9 11 21 44; Только нечетные элементы: 1 3 9 11 21.
Внимание: все результаты показаны в элементе управления <asp:Label /> у которых следующие ID: lbl_Test1, lbl_Test2, lbl_Test3, lbl_Test4 – созданные только в целях тестирования, не привязанные ко всему предмету сообщения в блоге.
Вы можете скачать рабочий исходник: СКАЧАТЬ.
Надеюсь, что этот пост был полезным и информативным.
Две главные особенности SortedSet<T>:
- Не позволено повторение элементов
- поддерживается отсортированный порядок, когда элементы вставлены или удалены без воздействия на производительность.
Чтобы было понятнее, давайте пройдём тесты, которые я сделал.
Тест 1: Создание SortedSet и печать всех его элементов (стандартная демонстрация поведения)
var sortedSet1 = new SortedSet<int> { 5, 9, 11, 1, 44, 21, 3, 2, 9};
foreach (int element in sortedSet1)
{
lbl_Test1.Text += " " + element;
}
* This source code was highlighted with Source Code Highlighter.
Результат: 1 2 3 5 9 11 21 44
Здесь мы можем заметить первую вышеупомянутую особенность. Число 9 дважды появляется в SortedSet, но в результате возвращается только один раз.
Тест 2: Посмотреть числа в диапозоне элементов.
var sortedSet1 = new SortedSet<int> { 5, 9, 11, 1, 44, 21, 3, 2, 9 };
foreach (int element in sortedSet1.GetViewBetween(5, 20))
{
lbl_Test2.Text += " " + element;
}
* This source code was highlighted with Source Code Highlighter.
Результат: 5 9 11
В тесте 2 можно увидеть, что это довольно полезный метод, который может использоваться, чтобы найти все числа между заданными нижним и верхним значениями. В нашем тесте 5 — нижнее, и 20 — верхнее значение.
Тест 3: Операции разности, объединения и пересечения в SortedSet
var sortedSet1 = new SortedSet<int> { 5, 9, 11, 1, 44, 21, 3, 2, 9 };
var sortedSet2 = new SortedSet<int> { 11, 7, 22, 21, 25, 30};
lbl_Test3.Text += "Разность:";
foreach (int element in sortedSet1.Except(sortedSet2))
{
lbl_Test3.Text += " " + element;
}
lbl_Test3.Text += "; Объединение:";
foreach (int element in sortedSet1.Union(sortedSet2))
{
lbl_Test3.Text += " " + element;
}
lbl_Test3.Text += "; Пересечение:";
foreach (int element in sortedSet1.Intersect(sortedSet2))
{
lbl_Test3.Text += " " + element;
}
* This source code was highlighted with Source Code Highlighter.
Результат: Разность: 1 2 3 5 9 44; Объединение: 1 2 3 5 9 11 21 44 7 22 25 30; Пересечение: 11 21;
В тесте 3 у нас есть два SortedSet. Используя вышеуказанные методы, мы выполняем различные операции.
Есть некоторые более полезные методы, такие как
sortedSet1.UnionWith(sortedSet2);
который навсегда сольёт два SortedSet, исключая повторяющиеся элементы.
Test 4: Удаление элементов используя Remove(int) и RemoveWhere(Predicate)
var sortedSet1 = new SortedSet<int> { 5, 9, 11, 1, 44, 21, 3, 2, 9 };
sortedSet1.Remove(5);
lbl_Test4.Text = "Без элемента номер 5:";
foreach (int element in sortedSet1)
{
lbl_Test4.Text += " " + element;
}
sortedSet1.RemoveWhere(X => X % 2 == 0);
lbl_Test4.Text += "; Только нечетные элементы:";
foreach (int element in sortedSet1)
{
lbl_Test4.Text += " " + element;
}
* This source code was highlighted with Source Code Highlighter.
Результат: Без элемента номер 5: 1 2 3 9 11 21 44; Только нечетные элементы: 1 3 9 11 21.
Внимание: все результаты показаны в элементе управления <asp:Label /> у которых следующие ID: lbl_Test1, lbl_Test2, lbl_Test3, lbl_Test4 – созданные только в целях тестирования, не привязанные ко всему предмету сообщения в блоге.
Вы можете скачать рабочий исходник: СКАЧАТЬ.
Надеюсь, что этот пост был полезным и информативным.