Java set сохранила заказ

В отличие от стандартного набора, порядок данных в упорядоченном наборе сохраняется. Мы использовали упорядоченные наборы, когда нам понадобился порядок, в котором мы ввели данные, которые должны быть обслуживаются в течение программы. В упорядоченном наборе, просмотр данных не меняет свой заказ, как это было бы в неупорядоченном наборе.

Заказы Python: обзор

Программирование в основном связано с обработкой данных. Как разработчик Python, вы найдете способы хранения данных таким образом, что соответствует вашим целям. Иногда вам нужно сохранить порядок введения данных в наборе, например, если вы обрабатываете банковские транзакции. Каждая транзакция должна быть уникальной, и важно сохранить порядок, в котором создаются транзакции. Заказанные наборы Python помогут вам сделать именно это.

В этой статье мы объясним концепцию программирования упорядоченного набора, прежде чем показать вам, как его создать в программе Python.

Что такое набор в Python?

На языке программирования Python набор – это коллекция уникальных элементов. Это структура данных на основе хеш-таблицы с неопределенным упорядочением элементов. Вы можете просмотреть элементы набора, добавить или удалить их, и выполнить стандартные набор операций объединения, пересечения, дополнения и разницы.

В отличие от списков, обычные наборы не сохраняют порядок, в который мы вставляем элементы. Это потому, что элементы в наборе обычно не хранятся в том порядке, в котором они появляются.

Что такое упорядоченный набор?

В отличие от стандартного набора, порядок данных в упорядоченном наборе сохраняется. Мы использовали упорядоченные наборы, когда нам понадобился порядок, в котором мы ввели данные, которые должны быть обслуживаются в течение программы. В упорядоченном наборе, просмотр данных не меняет свой заказ, как это было бы в неупорядоченном наборе.

Как создать упорядоченный набор в Python

Python позволяет создавать заказанные наборы в ваших программах. Ниже мы продемонстрируем два способа сделать это: использование Python’s Заказано упаковка и ручной метод. Но сначала давайте установим контекст. Допустим, вы разрабатываете приложение для банка, в котором вам нужно записывать номера транзакций один за другим в сводном документе. Каждая операция по транзакции банков уникальна.

Кроме того, вам нужен порядок, в котором транзакции выполняются, чтобы именно отражаться в вашем наборе данных. Это прекрасная возможность для вас использовать Заказано класс включен в Python’s Заказан_SET упаковка.

Заказанный сет класс Python

Самый простой способ создания упорядоченного набора в Python – это использовать класс упорядоченного расхода. Обратите внимание, что этот класс не включен по умолчанию. Сначала нужно убедиться, что у вас есть Заказано упаковка установлен.

Обратите внимание, что Заказано является сторонним пакетом, и его функциональность может измениться независимо от версии Python, которую вы используете. Чтобы установить пакет, введите следующую команду в вашем терминале:

PIP установить заказанный набор

Это позволит вам использовать класс заказанного набора.

Теперь вы можете создать программу Python, которая использует класс заказанного набора. Посмотрим, как выглядит простой заказанный набор:

Из упорядоченного_SET import oryedset settest = упорядочен (["первой", "второй", "второй", "третий"]) print (settest)

Сначала мы импортируем недавно установленную пакет Ordered_set. Затем мы создаем объект из класса упорядоченного расхода, передавая члены в качестве параметров. Оператор печати в этом примере выводит следующее:

Заказан (['First', 'Second', 'третий'])

Строка «второй», в которую мы ввели дважды при создании набора, теперь исчез, в то время как порядок, в который мы ввели данные, сохраняется.

Теперь давайте создадим упорядоченный набор банковских транзакций. В реальном сценарии вы хотели бы сохранить порядок внедрения на месте, чтобы позволить вам проанализировать транзакции, проверить на мошенничество и т. Д. Вот как может выглядеть программа:

Из упорядоченного_SET Import OrderedSet BankStatement = OrderedSet (["BK0001", "BK0002", "BK0003", "BK0004", "BK0005"]).

Заказанный набор создан.

Теперь, если вы хотите выполнить данную транзакцию, вы можете выбрать соответствующий набор элементов, используя его индекс:

. Print ("Transaction no", Bankstatement [1], "была успешно записана")

Это дает вам следующий выход:

Транзакция No BK0002 была успешно зарегистрирована

Но что, если кто -то захочет добавить транзакцию, которая уже была записана, например, «bk0004»? Если бы мы использовали список, это действие было бы возможно. К счастью, упорядоченный набор не допускает его. Давайте запустим следующий код:

Banktrs.Добавить ("bk0004") print (banktrs)

Результат заявления печати остается неизменным, доказывая, что упорядоченный набор игнорировал действие:

Заказан (['BK0001', 'BK0002', 'BK0003', 'BK0004', 'BK0005'])

Эта функция оказывается особенно полезной в этом случае. Как программист, вам не придется беспокоиться о том, чтобы каждый участник данных был уникальным.

Заказанный пакет содержит другие примечательные функции. Это позволяет вам выполнять полезные операции, такие как различие, пересечение и союз с использованием операторов -, & и |.

Установить операции

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

Из упорядоченного_SET Import OrderedSet BankStatement1 = OrderedSet ([«BK0001», «BK0002», «BK0003», «BK0004», «BK0005»]) BANKSTATEMENT2 = Заказан («BK0004», «BK0005», «BK0006», «BK0007», «BK0008»

Мы намеренно включили транзакции BK0004 и BK0005 в обоих утверждениях. Это может быть так, если первое и

1. Какова цель упорядоченного установленного в Python?
Заказанный набор в Python используется для сохранения порядка введения данных, что важно в сценариях, таких как обработка банковских транзакций.
2. Чем набор отличается от упорядоченного набора в Python?
Набор в Python не сохраняет порядок элементов, в то время как упорядоченный набор.
3. Как вы можете создать упорядоченный набор в Python?
Вы можете создать упорядоченный набор в Python, используя класс заказанного сектора из пакета упорядоченного набора. Сначала убедитесь, что пакет установлен, затем импортируйте класс и создайте объект с желаемыми элементами.
4. Что произойдет, если вы попытаетесь добавить дублированный элемент в упорядоченный набор?
Заказанный набор не разрешает дублируемые элементы, поэтому попытка добавить дублированный элемент не изменит набор.
5. Каковы некоторые преимущества использования упорядоченного набора в Python?
Одним из преимуществ использования упорядоченного набора является то, что вам не нужно беспокоиться о обеспечении уникальных элементов, поскольку он автоматически обрабатывает дубликаты. Кроме того, он сохраняет порядок вставки данных, который может быть полезен для анализа и обработки данных.
6. Можете ли вы выполнить наборные операции, такие как Union и пересечение с упорядоченным набором?
Да, пакет упорядоченного набора позволяет вам выполнять наборные операции, такие как разница, пересечение и объединение, используя операторы -и и |.
7. Как вы можете получить доступ к конкретным элементам в заказанном наборе?
Вы можете получить доступ к конкретным элементам в упорядоченном наборе, используя индекс элемента, аналогичный доступу к элементам в списке.
8. Является ли класс упорядоченного сети, включенный по умолчанию в Python?
Нет, класс упорядоченного расхода не включен по умолчанию в Python. Вам нужно установить заказанный пакет для его использования.
9. Может ли функциональность заказанного пакета изменить независимо от версии Python?
Да, функциональность упорядоченного пакета отделена от версии Python, которую вы используете. Это сторонний пакет, который можно обновлять и изменить независимо.
10. Как вы можете установить заряженный пакет на Python?
Вы можете установить пакет упорядоченного набора в Python, используя команду PIP в вашем терминале: «Установка PIP заказано».

Java set сохранила заказ

В отличие от стандартного набора, порядок данных в упорядоченном наборе сохраняется. Мы использовали упорядоченные наборы, когда нам понадобился порядок, в котором мы ввели данные, которые должны быть обслуживаются в течение программы. В упорядоченном наборе, просмотр данных не меняет свой заказ, как это было бы в неупорядоченном наборе.

Заказы Python: обзор

Программирование в основном связано с обработкой данных. Как разработчик Python, вы’найду способы хранения данных таким образом, чтобы соответствовать вашим целям. Иногда вы’Необходимо сохранить порядок введения данных в наборе, например, если вы обрабатываете банковские транзакции. Каждая транзакция должна быть уникальной, и важно сохранить порядок, в котором создаются транзакции. Питон’Заказанные наборы помогут вам сделать именно это.

В этой статье мы объясним концепцию программирования упорядоченного набора, прежде чем показать вам, как его создать в программе Python.

Что такое набор в Python?

На языке программирования Python набор – это коллекция уникальных элементов. Это структура данных на основе хеш-таблицы с неопределенным упорядочением элементов. Вы можете просмотреть набор’S Элементы, добавить или удалить их и выполнить стандартные набор операций объединения, пересечения, комплемента и разницы.

В отличие от списков, обычные наборы не сохраняют порядок, в который мы вставляем элементы. Это потому, что элементы в наборе обычно не хранятся в том порядке, в котором они появляются.

Что такое упорядоченный набор?

В отличие от стандартного набора, порядок данных в упорядоченном наборе сохраняется. Мы использовали упорядоченные наборы, когда нам понадобился порядок, в котором мы ввели данные, которые должны быть обслуживаются в течение программы. В упорядоченном наборе, просмотр данных не меняет свой заказ, как это было бы в неупорядоченном наборе.

Как создать упорядоченный набор в Python

Python позволяет создавать заказанные наборы в ваших программах. Ниже мы’LL демонстрируйте два способа сделать это: использование Python’с Заказано упаковка и ручной метод. Но сначала, пусть’S установить контекст. Позволять’S скажу вам’Повторная разработка приложения для банка, в котором вам необходимо записывать номера транзакций один за другим в сводном документе. Каждая операция по транзакции банков уникальна.

Кроме того, вам нужен порядок, в котором транзакции выполняются, чтобы именно отражаться в вашем наборе данных. Это прекрасная возможность для вас использовать Заказано класс включен в Python’с Заказан_SET упаковка.

Питон’S заказал класс SET

Самый простой способ создания упорядоченного набора в Python – это использовать класс упорядоченного расхода. Обратите внимание, что этот класс не включен по умолчанию. Сначала нужно убедиться, что у вас есть Заказано упаковка установлен.

Обратите внимание, что Заказано является сторонним пакетом, и его функциональность может измениться независимо от версии Python, что вы’повторный использование. Чтобы установить пакет, введите следующую команду в вашем терминале:

PIP установить заказанный набор

Это позволит вам использовать класс заказанного набора.

Теперь вы можете создать программу Python, которая использует класс заказанного набора. Позволять’S Посмотрите, как выглядит простой упорядоченный набор:

Из упорядоченного_SET import oryedset settest = упорядочен (["первой", "второй", "второй", "третий"]) print (settest)

Сначала мы импортируем недавно установленную пакет Ordered_set. Затем мы создаем объект из класса упорядоченного расхода, передавая члены в качестве параметров. Оператор печати в этом примере выводит следующее:

Заказан (['First', 'Second', 'третий'])

Строка ‘Второй’ То, что мы ввели дважды при создании набора, теперь исчезает, а порядок, в котором мы ввели данные, поддерживается.

Теперь, пусть’S создать упорядоченный набор банковских транзакций. В реальном сценарии вы хотели бы сохранить порядок внедрения на месте, чтобы позволить вам проанализировать транзакции, проверить на мошенничество и т. Д. Вот как может выглядеть программа:

Из упорядоченного_SET Import OrderedSet BankStatement = OrderedSet (["BK0001", "BK0002", "BK0003", "BK0004", "BK0005"]).

Заказанный набор создан.

Теперь, если вы хотите выполнить данную транзакцию, вы можете выбрать соответствующий набор элементов, используя его индекс:

. Print ("Transaction no", Bankstatement [1], "была успешно записана")

Это дает вам следующий выход:

Транзакция No BK0002 была успешно зарегистрирована

Но что, если кто -то захочет добавить транзакцию, которая уже была записана, например, как “BK0004”? Если бы мы использовали список, это действие было бы возможно. К счастью, упорядоченный набор не допускает его. Позволять’S Запустите следующий код:

Banktrs.Добавить ("bk0004") print (banktrs)

Результат заявления печати остается неизменным, доказывая, что упорядоченный набор игнорировал действие:

Заказан (['BK0001', 'BK0002', 'BK0003', 'BK0004', 'BK0005'])

Эта функция оказывается особенно полезной в этом случае. Как программист, вы выиграли’Т должен беспокоиться о том, чтобы каждый член данных был уникальным.

Заказанный пакет содержит другие примечательные функции. Это позволяет вам выполнять полезные операции, такие как различие, пересечение и союз с использованием операторов -, И и |.

Установить операции

Позволять’S переписывает программу для создания двух разных заказанных наборов, которые могут представлять два банковских выписки.

Из упорядоченного_SET Import OrderedSet BankStatement1 = OrderedSet ([«BK0001», «BK0002», «BK0003», «BK0004», «BK0005»]) BANKSTATEMENT2 = Заказан («BK0004», «BK0005», «BK0006», «BK0007», «BK0008»

Мы намеренно включили транзакции BK0004 и BK0005 в обоих утверждениях. Это может быть так, если первое и второе заявление частично охватывает тот же период времени.

Если вы хотите увидеть транзакции, которые существуют только в BankStatement1, просто запустите следующий бит кода:

diff = bankstatement1 - bankstatement2 print («Транзакции, уникальные для первого резюме, -», Diff)

Это дает нам следующий результат:

Транзакции, уникальные для первого резюме, представляют собой упорядоченные (['bk0001', 'bk0002', 'bk0003'])

В целях читаемости мы можем приложить упорядоченный SET Inter в списке при отображении данных, используя этот код:

Diff = BankStatement1 - BankStatement2 Print («Транзакции, уникальные для первого резюме, - это», List (diff))

Теперь, если вам нужно получить только те транзакции, которые существуют в обоих операторах, используйте оператор пересечения, как SO:

Inter = BankStatement1 и BankStatement2 Print («Транзакции, общие для обоих резюме», List (Inter))

Ты’Получить предполагаемый результат:

Транзакции, общие для обоих резюме, представлены ['BK0004', 'BK0005']

Наконец, если вы хотите увидеть все транзакции обоих утверждений, просто выполните операцию Союза:

Union = Bankstatement1 | BankStatement2 Print («Вот все транзакции этих резюме:», LIS (Union))

Это даст вам следующий вывод:

Вот все транзакции этих резюме: упорядоченный селект ['bk0001', 'bk0002', 'bk0003', 'bk0004', 'bk0005', 'bk0006', 'bk0007', 'bk0008']

Пакет oronding_set делает создание и манипулирование упорядоченными наборами в Python простыми и эффективными.

Ручной метод

Также возможно создать упорядоченный набор данных полностью вручную. Если вы не можете использовать пакет заказанного набора, вы все равно можете использовать этот обходной путь. Позволять’S Посмотрите, как работает этот метод.

Сначала мы’ll Создать строковой массив, содержащий наш набор данных:

BankStatement = ["BK0001", "BK0002", "BK0003", "BK0004", "BK0004", "BK0005", "BK0006"]

Затем мы создаем для цикла, который проверяет каждый элемент, ищет дубликаты. Если есть, они будут удалены из набора. Чтобы проверить это, мы’LL намеренно включите дублированный элемент в массив.

Для строки в диапазоне (Len (BankStatement), 1, -1): если BankStatement [String-1] в BankStatement [: String-1]: BankStatement.поп (String-1)

Цикл FOR начинается с обратной стороны списка, то есть из последнего элемента. Требуется этот элемент (называемый строкой выше) и проверяет, присутствует ли он в подмножестве списка до тех пор, пока но не считая текущего элемента (строка). Если он уже присутствует, мы удаляем упоминание о элементе ближе к передней части списка, но держим первоначальное упоминание элемента ближе к задней части списка.

Теперь, когда мы печатаем содержимое массива, нет дубликатов, и заказ поддерживается:

['Bk0001', 'bk0002', 'bk0003', 'bk0004', 'bk0005', 'bk0006']

Это позволяет нам создавать упорядоченный набор, даже если мы не можем использовать Python’S Выделенная функция!

Научитесь кодировать онлайн

Python – это универсальный язык программирования с несколькими параметрами для создания упорядоченных наборов. Вы можете использовать класс заказанного сериала, чтобы выполнить работу, или вы можете сделать это вручную, если это.

Хочу выйти за рамки заказанного создания набора в Python?

Udacity’S-эксперт-разработанный введение в программу программирования NanodeGree-ваш следующий шаг. К концу этого курса вы’Я знаю основы кодирования и обладать навыками, чтобы уверенно управлять сценариями программирования реального мира, используя HTML, CSS, Python и многое другое!

Полные примеры кода

Пример 1: банковская транзакция заказана

Из orsored_set Import Orderedset BankStatement = OrderedSet ([«BK0001», «BK0002», «BK0003», «BK0004», «BK0005»]) Печать («Транзакция NO», BankStatement [1], «BK0005»]) Banktrs.Добавить ("bk0004") print (banktrs)

Пример 2: Distect, Union, перекресток

Из упорядоченного_SET Import OrderedSet BankStatement1 = OrderedSet ([«BK0001», «BK0002», «BK0003», «BK0004», «BK0005»]) BANKSTATEMEMENT2 = Заказанный сетевой Уникальными для первого резюме являются ", List (diff)) inter = bankstatement1 и bankstatement2 print (" Транзакции, общие для обоих, являются ", List (Inter)) Union = BankStatement1 | BankStatement2 Print («Вот все транзакции этих резюме:», List (Union))

Пример 3: Ручной метод

BankStatement = ["BK0001", "BK0002", "BK0003", "BK0004", "BK0004", "BK0005", "BK0006"] для строки в диапазоне (LEN (BankStatement), 1, -1): если BankStatement [String-1] в BankStatement [: String-1]: BankStatement.POP (String-1) Print (BankStatement)

Java set сохранила заказ?

Удерживает ли набор Java? Метод возвращает набор, и предположительно, данные заказаны, но итерация по набору, данные неупопорядоченные. Есть ли лучший способ управлять этим? Нужно ли изменить метод, чтобы вернуть что -то другое, кроме набора?

30.6K 27 27 Золотые значки 91 91 Серебряные значки 100 100 бронзовых значков

спросил 25 мая 2012 года в 10:27

user840930 user840930

5 084 21 21 Золотые значки 62 62 Серебряные значки 93 93 Бронзовые значки

“Элементы возвращаются в любом конкретном порядке (если этот набор не является экземпляром какого -либо класса, который дает гарантию).”Это то, что говорит метод итератора для набора. найдено здесь

25 мая 2012 года в 10:29

13 ответов 13

Интерфейс SET не предоставляет никаких гарантий заказа.

Его подвластной сортировка представляет собой набор, который сортируется в соответствии с некоторым критерием. В Java 6 есть два стандартных контейнера, которые реализуют SortedSet . Они деревья и параллельные .

В дополнение к интерфейсу SortedSet, есть также класс LinkedHashset. Он помнит порядок, в котором элементы были вставлены в набор, и возвращает свои элементы в этом порядке.

10.9k 10 10 Золотые значки 70 70 Серебряных значков 94 94 Бронзовые значки

Ответ 25 мая 2012 года в 10:30

483K 107 107 Золотые значки 943 943 Серебряные значки 1007 1007 Бронзовые значки

Кроме того, из -за различного строкового хеширования в Java 8, по умолчанию (несортированный) заказ в наборах и картах изменится. Если вы полагаетесь на несортированный заказ, ваш код будет вести себя по -разному в Java 8.

17 ноября 2014 года в 16:15

Я понимаю, что класс, не упорядоченный, является нормальным, но поведение, которое я ожидал, заключалось в том, чтобы оставить их, когда они были введены, и не связывались с порядком, вместо этого оно просто перетасовывает элементы каждый раз, когда агрегируется. Ваше решение не оптимальное, потому что тогда мне придется реализовать целую структуру, чтобы они были отсортированы так же, как они были введены: S

25 февраля 2019 года в 8:39

@White_king: набор – это математическая концепция, которая не содержит понятия «порядок введения», поэтому для интерфейса Java имеет смысл следовать его соглашениям. Существуют упорядоченные наборы, но порядок определяется соотношением (компаратором в Java), снова соответствует определению в теории наборов с определением в Java. Ваше ожидание в том, что он соблюдает порядок внедрения, вероятно, поступает из списков, но наборы не являются списками.

9 августа 2019 в 10:53

4 396 11 11 Золотые значки 34 34 Серебряные значки 58 58 Бронзовые Значки

ответил 25 мая 2012 года в 10:29

Xiaofeng.Ли Сяофенг.Ли

8 117 2 2 Золотые значки 23 23 Серебряные значки 30 30 бронзовых значков

Список не является набором (он не гарантирует уникальность членства).

6 июня 2013 в 22:03

Во многих бизнес -списках уникальных случаев нельзя использовать только для того, чтобы сохранить порядок, а не на установке. LinkedHashset поддерживает заказ и хранит уникальные.

9 июля 2015 года в 15:34

Как многие из участников предложили использовать LinkedHashset сохранить порядок коллекции. Вы можете обернуть свой набор, используя эту реализацию.

Сортируемый Реализация может использоваться для отсортированного заказа, но для вашей цели использования LinkedHashset.

Также из документов,

“Эта реализация отталкивает своих клиентов от неуточненного, обычно хаотического упорядочения, предоставляемого Hashset, без роста затрат, связанных с деревьями. Его можно использовать для создания копии набора, который имеет тот же заказ, что и оригинал, независимо от реализации исходного набора: »

Установит ли установку заказа внедрения?

Когда элементы получают из хешса из -за хэширования введенного ими порядка, не поддерживается во время поиска. Hashset сохраняет элементы с использованием механизма, называемого хешином. Мы можем выполнить заданную задачу, используя LinkedHashset. Класс LinkedHashset реализует список вдвойне связанный, чтобы он мог пройти через все элементы.

Пример:

Вход : HashSetInput = Выход: Hashsetprint = Вход : HashSetInput = Выход: Hashsetprint =

Реализация с Hashset: (порядок не поддерживается)

Синтаксис:

Hashset num = new Hashset ();

Подход:

  1. Создать объект HashSet.
  2. Вставить несколько элементов в хэшсет.
  3. Распечатайте хэшсет.(Заказ не поддерживается)

Ниже приведена реализация вышеуказанного подхода:

gmamaladze / A_readme.доктор медицинских наук

Многие наивно предполагают обычные .Net Hashset сохраняет заказ взима. Действительно, хэшсет случайно сохраняет заказ внедрения, пока вы не удалите и не добавите некоторые элементы. В Java – LinkedHashset существует такая структура данных, которая уважает порядок и имеет время o (1) RW.

Нет, я не нашел (работающую) соответствующую реализацию в .СЕТЬ. Это я написал это.

Реализация использует связанный список в сочетании с словарем для определения итерации, упорядочения и в то же время разрешить o (1) удаление.

Заказ есть нет затронуто, если элемент повторно встроен в набор он сохраняет старую позицию.

Этот код распределен по лицензии MIT. Copyright (C) 2013 Джордж Мамаладзе См. Лицензию.txt или http: // opensource.org/лицензии/MIT-License.PHP

Этот файл содержит двунаправленный текст Unicode, который может быть интерпретирован или скомпилирован иначе, чем то, что кажется ниже. Чтобы просмотреть, откройте файл в редакторе, который раскрывает скрытые символы Unicode. Узнайте больше о двунаправленных персонажах Unicode

// Этот код распределен по лицензии MIT. Авторские права (C) 2013 Джордж Мамаладзе
// См. Лицензию.txt или http: // opensource.org/лицензии/MIT-License.PHP
Использование системы . Коллекции;
Использование системы . Коллекции . Общий;
Пространство имен GMA . Datastructures
Общедоступный класс заказан < T >: Icollection
Частный Ридонли Иддеарий < T , LinkedListNode < T >> m_dictionary;
Частный Readonly LinkedList < T >m_linkedlist;
Public Orderset ()
: Это (EqualityComperer < T >. По умолчанию )
>
Public OrderedSet (iequalityComperer < T >сравнитель)
m_dictionary = новый словарь < T , LinkedListNode < T >> (сравнитель);
m_linkedlist = new LinkedList < T >();
>
Общественный int count
получать
>
Общественная виртуальная лопатка
получать
>
void icollection < T >. Добавить (t элемент)
Добавить элемент ) ;
>
Public void Clear ()
m_linkedlist . Прозрачный ( ) ;
m_dictionary . Прозрачный ( ) ;
>
Public Bool Remove (T Item)
LinkedListnode < T >узел;
bool найден = m_dictionary . TrygetValue (Item, Out Node);
если ( ! найден) вернуть ложь;
m_dictionary . Убрать предмет ) ;
m_linkedlist . Удалить (узел);
вернуть истину;
>
Общественный ienumerator < T >Getenumerator ()
вернуть m_linkedlist . GetEnumerator ();
>
Ienumerator Ienumerable . Getenumerator ()
return getEnumerator ();
>
Общественный Bool содержит (T Item)
вернуть m_dictionary . Содержитки (ITEM);
>
public void copyto (t [] array, int arrayindex)
m_linkedlist . Copyto (array, arrayindex);
>
Public Bool Add (T Item)
if (m_dictionary . Содержит, (ITEM)) вернуть false;
LinkedListnode < T >node = m_linkedlist . Addlast (Item);
m_dictionary . Добавить (элемент, узел);
вернуть истину;
>
>
>

Этот файл содержит двунаправленный текст Unicode, который может быть интерпретирован или скомпилирован иначе, чем то, что кажется ниже. Чтобы просмотреть, откройте файл в редакторе, который раскрывает скрытые символы Unicode. Узнайте больше о двунаправленных персонажах Unicode

// Этот код распределен по лицензии MIT. Авторские права (C) 2013 Джордж Мамаладзе
// См. Лицензию.txt или http: // opensource.org/лицензии/MIT-License.PHP
Использование системы;
Использование системы . Коллекции . Общий;
Использование системы . Линк;
Пространство имен GMA . Datastructures
Общедоступный класс заказал < T >: Заказан < T >, ISET
Public OrderedSetext ()
>
Public OrderedSetext (iequalityComperer < T >сравнитель)
: База (сравнитель)
>
Public OrderseText (Ienumerable < T >коллекция)
: This (Collection, EqualityComperer < T >. По умолчанию )
>
Public OrderseText (Ienumerable < T >Коллекция, iequalityComparer < T >сравнитель)
: Это (сравнитель)
Foreach (T Item в коллекции)
Добавить элемент ) ;
>
>
////
/// изменяет текущий набор, чтобы он содержит все элементы, которые присутствуют как в текущем наборе, так и в
/// Указанная коллекция.
////
//// Коллекция для сравнения с текущим набором.
//// нулевой.
Public Void Union с (Ienumerable < T >другой )
if (Другое == null) бросить новый аргумент
Foreach (T -элемент в других)
Добавить (элемент);
>
>
////
/// изменяет текущий набор, чтобы он содержит только элементы, которые также находятся в указанной коллекции.
////
//// Коллекция для сравнения с текущим набором.
//// нулевой.
public void recesectwith (ienumerable < T >другой )
Foreach (T -элемент в других)
if (содержит (элемент)) продолжить;
Удалить (элемент);
>
>
////
/// Удаляет все элементы в указанной сборе из текущего набора.
////
//// Коллекция предметов для удаления из набора.
//// нулевой.
публичная пустота, кроме как < T >другой )
Foreach (T -элемент в других)
Удалить (элемент);
>
>
////
/// изменяет текущий набор, чтобы он содержит только элементы, которые присутствуют либо в текущем наборе, либо в
/// Указанная коллекция, но не оба.
////
//// Коллекция для сравнения с текущим набором.
//// нулевой.
public void symmetricexceptwith (ienumerable < T >другой )
if (Другое == null) бросить новый аргумент
Foreach (T -элемент в других)
if (содержит (элемент))
Удалить (элемент);
>
еще
Добавить (элемент);
>
>
>
////
/// определяет, является ли набор подмножества указанной коллекции.
////
////
/// true, если текущий набор – это подмножество; В противном случае ложь.
////
//// Коллекция для сравнения с текущим набором.
//// нулевой.
Public Bool Issubsetof (ienumerable < T >другой )
if (Другое == null) бросить новый аргумент
var outherhashset = новый хэшсет < T >( другой ) ;
Вернуть другой . Issupersetof (это);
>
////
/// определяет, является ли текущий набор суперсетом указанной коллекции.
////
////
/// true, если текущий набор является суперсет; В противном случае ложь.
////
//// Коллекция для сравнения с текущим набором.
//// нулевой.
Public Bool issupersetof (ienumerable < T >другой )
if (Другое == null) бросить новый аргумент
вернуть другие . Все (содержит);
>
////
/// Определяет, является ли текущий набор правильным суперсетом указанной коллекции.
////
////
/// true, если объект является правильным суперсетом
///; В противном случае ложь.
////
//// Коллекция для сравнения с текущим набором.
//// нулевой.
Public Bool IspropersuperSetof (Ienumerable < T >другой )
if (Другое == null) бросить новый аргумент
var outherhashset = новый хэшсет < T >( другой ) ;
Вернуть другой . Ispropersubsetof (это);
>
////
/// Определяет, является ли текущий набор (строгим) подмножествами указанной сбора.
////
////
/// true, если текущий набор – правильное подмножество; В противном случае ложь.
////
//// Коллекция для сравнения с текущим набором.
//// нулевой.
public bool ispropersubsetof (ienumerable < T >другой )
if (Другое == null) бросить новый аргумент
var outherhashset = новый хэшсет < T >( другой ) ;
Вернуть другой . Ispropersupersetof (это);
>
////
/// определяет, перекрывается ли текущий набор с указанной коллекцией.
////
////
/// true, если текущий устанавливает и разделяет хотя бы один общий элемент; В противном случае ложь.
////
//// Коллекция для сравнения с текущим набором.
//// нулевой.
Общественные перекрытия (Ienumerable < T >другой )
if (Другое == null) бросить новый аргумент
if (count == 0) вернуть false;
вернуть другие . Любой (содержит);
>
////
/// Определяет, содержат ли текущий набор и указанный сбор.
////
////
/// true, если текущий набор равен; В противном случае ложь.
////
//// Коллекция для сравнения с текущим набором.
//// нулевой.
общедоступные сетаки (ienumerable < T >другой )
if (Другое == null) бросить новый аргумент
var outherhashset = новый хэшсет < T >( другой ) ;
Вернуть другой . Setequals (это);
>
>
>

Этот файл содержит двунаправленный текст Unicode, который может быть интерпретирован или скомпилирован иначе, чем то, что кажется ниже. Чтобы просмотреть, откройте файл в редакторе, который раскрывает скрытые символы Unicode. Узнайте больше о двунаправленных персонажах Unicode

// Этот код распределен по лицензии MIT. Авторские права (C) 2013 Джордж Мамаладзе
// См. Лицензию.txt или http: // opensource.org/лицензии/MIT-License.PHP
#region использовал пространства имен
Использование системы;
Использование системы . Коллекции . Общий;
Использование системы . Глобализация;
Использование системы . Линк;
Используя Microsoft . VisualStudio . Тестирование . Единомышленник;
#endregion
Пространство имен GMA . Datastructures . Тест
Внутренняя команда класса
public const char seperator = ‘;’ ;
Частная операция Readonly M_Operation;
Частный Readonly T M_ITEM;
публичная команда (операция операции, T Item)
m_operation = операция;
m_item = item;
>
public void выполнить (iset < T >набор )
переключение (m_operation)
дело . Добавлять :
набор . Добавить (m_item);
перерыв ;
дело . Удалять :
набор . Удалить (m_item);
перерыв ;
дело . Прозрачный :
набор . Прозрачный ( ) ;
перерыв ;
по умолчанию :
бросить новое notsupportedException (строка . Формат (&laquo;Операция [] не поддерживается. “, m_operation));
>
>
Общественная статическая команда < T >Parse (String Token)
var prefixchar = token [0];
var itemText = token . Подстроение (1);
var Operation = chartoPeration (префикс);
T item =
! Нить . Isnullorempty (itemtext)
? (T) преобразовать . ChangeType (itemText, typeof (t))
: по умолчанию (t);
вернуть новую команду < T >(операция, элемент);
>
Частная статическая операция Chartoperection (char ch)
Переключение (Ch)
case ‘+’:
Операция возврата . Добавлять ;
случай ‘-‘ :
Операция возврата . Удалять ;
случай ‘#’ :
Операция возврата . Прозрачный ;
по умолчанию :
бросить новое notsupportedException (строка . Формат (&laquo;Операция [] не поддерживается. “, Ch));
>
>
>
Внутренняя операция перечисления
Добавлять ,
Удалять ,
Прозрачный
>
[TestClass]
Общедоступный класс заказал
[ Метод испытания ]
Публичная пустота ()
const string input = “”;
const string ожидается = “”;
Testx (вход, ожидаемый);
>
[ Метод испытания ]
public void add_one ()
const string input = “+1;”;
const string ожидается = “1”;
Testx (вход, ожидаемый);
>
[ Метод испытания ]
public void add_many ()
const string input = “+1; +2; +3; +4; +5; +6”;
const string ожидается = “1; 2; 3; 4; 5; 6”;
Testx (вход, ожидаемый);
>
[ Метод испытания ]
public void add_many_then_clear ()
const string input = “+1; +2; +3; +4; +5; +6;#”;
const string ожидается = “”;
Testx (вход, ожидаемый);
>
[ Метод испытания ]
public void add_many_then_clear_then_add ()
const string input = “+1; +2; +3; +4; +5; +6;#;+4; +3; +2;”;
const string ожидается = “4; 3; 2”;
Testx (вход, ожидаемый);
>
[ Метод испытания ]
public void adds_and_removes_mixed ()
const string input = “+1; +2; +3; +4; -2; -3; +2; +3; +5”;
const string ожидается = “1; 4; 2; 3; 5”;
Testx (вход, ожидаемый);
>
private void testx (строковая вход, ожидается строка)
ISET < int >set = new OrderedSetext < int >();
Execute (set, input);
Утверждает (ожидается, установлен);
>
Private void утверждает < T >(Строка ожидается, оборудованная < T >действительный )
var expactedarray =
ожидал
. Сплит (команда < int >. Разделитель )
. Где (s => ! нить . Isnullorempty (ы))
. Выберите (token => конвертировать . ChangeType (токен, typeof (t)))
. Бросать < T >();
AssertEnumerables (ExpactedArray, фактическое);
>
Частная статическая void assertemerumerables < T >(Ienumerable < T >Ожидается, связан < T >действительный )
строка сепаратора = команда < T >. Разделитель . Тостронг (CultureInfo . Invarytculture);
string wedingText = string . Присоединяйтесь (сепаратор, ожидаемый . Выберите (item => конвертировать . ToString (item)));
строка ActualText = String . Присоединиться (сепаратор, фактический . Выберите (item => конвертировать . ToString (item)));
Утверждать . Areeq
ual (ожидаемый текст, фактический текст);
>
Private void выполнить (ISET < int >SET, String Program)
var Commands =
программа
. Сплит (команда < int >. Разделитель )
. Где (s => ! нить . Isnullorempty (ы))
. Выберите (команда < int >. Parse);
foreach (команда VAR в командах)
командование . Выполнить (set);
>
>
>
>