Java는 정렬 명령을 유지합니다

표준 세트와 달리 순서 세트의 데이터 순서가 보존됩니다. 우리는 프로그램 과정에서 유지 될 데이터를 입력 한 순서가 필요할 때 순서 세트를 사용했습니다. 순서 세트에서 데이터를 보면 순서대로 세트에서와 같이 순서가 변경되지 않습니다.

파이썬 순서 세트 : 개요

프로그래밍은 주로 데이터 처리에 관한 것입니다. Python 개발자는 목표와 일치하는 방식으로 데이터를 저장하는 방법을 찾을 수 있습니다. 때로는 은행 거래를 처리하는 경우 세트에서 데이터 삽입 순서를 보존해야합니다. 각 거래는 고유해야하며 거래가 생성되는 순서를 보존하는 것이 중요합니다. Python의 주문 세트는 당신이 그렇게하는 데 도움이됩니다.

이 기사에서는 Python 프로그램에서 하나를 만드는 방법을 보여주기 전에 순서 세트의 프로그래밍 개념을 설명합니다.

파이썬의 세트는 무엇입니까??

파이썬 프로그래밍 언어에서 세트는 고유 한 요소 모음입니다. 정의되지 않은 요소 순서가있는 해시 테이블 기반 데이터 구조입니다. 세트의 요소를 탐색하고, 추가 또는 제거하고, 연합, 교차로, 보완 및 차이의 표준 세트 작업을 수행 할 수 있습니다.

목록과 달리 일반 세트는 요소를 삽입하는 순서를 보존하지 않습니다. 세트의 요소는 일반적으로 나타나는 순서로 저장되지 않기 때문입니다.

주문 세트는 무엇입니까??

표준 세트와 달리 순서 세트의 데이터 순서가 보존됩니다. 우리는 프로그램 과정에서 유지 될 데이터를 입력 한 순서가 필요할 때 순서 세트를 사용했습니다. 순서 세트에서 데이터를 보면 순서대로 세트에서와 같이 순서가 변경되지 않습니다.

파이썬에서 순서 세트를 만드는 방법

Python은 프로그램에서 순서 세트를 만들 수 있습니다. 아래에서 우리는 그렇게하는 두 가지 방법을 보여줍니다 : Python ‘s 사용 주문 세트 패키지 및 수동 방법. 그러나 먼저, 맥락을 설정합시다. 요약 문서에서 거래 번호를 다시 기록 해야하는 은행 용 앱을 개발한다고 가정 해 봅시다. 각 은행 거래 운영은 고유합니다.

또한 데이터 세트에 정확하게 반영되도록 거래가 이루어지는 순서를 원합니다. 이것은 당신이 사용할 수있는 완벽한 기회입니다 주문 세트 Python ‘s에 포함 된 클래스 ordered_set 패키지.

Python의 주문 세트 클래스

Python에서 순서 세트를 만드는 가장 간단한 방법은 OrderedSet 클래스를 사용하는 것입니다. 이 클래스는 기본적으로 포함되지 않습니다. 먼저 당신이 가지고 있는지 확인해야합니다 주문 세트 패키지가 설치되었습니다.

주목하십시오 주문 세트 타사 패키지이며 기능은 사용중인 파이썬 버전과 독립적으로 변경 될 수 있습니다. 패키지를 설치하려면 터미널에 다음 명령을 입력하십시오

PIP 설치 주문 세트

이렇게하면 OrderedSet 클래스를 사용할 수 있습니다.

이제 OrderedSet 클래스를 사용하는 Python 프로그램을 만들 수 있습니다. 간단한 순서 세트가 어떻게 보이는지 봅시다

ordered_set import orderedset settest = orderedset ([ "First", "Second", "Second", "Third"]) print (settest)

먼저 새로 설치된 Ordered_Set 패키지를 가져옵니다. 그런 다음 OrderedSet 클래스에서 객체를 생성하여 멤버를 매개 변수로 전달합니다. 이 예제의 인쇄 문은 다음을 출력합니다

OrderedSet ([ 'First', 'Second', 'Third'])))))

세트를 만들 때 두 번 입력 한 문자열 ‘두 번째’는 이제 사라졌으며 데이터를 입력 한 순서는 유지됩니다.

이제 주문한 은행 거래 세트를 만들어 봅시다. 실제 시나리오에서는 거래 순서를 유지하고 거래를 분석하고 사기를 확인하는 등을 원할 것입니다. 다음은 프로그램이 어떻게 보이는지입니다

Ordered_set import OrderedSet Bankstatement = OrderedSet ([ "BK0001", "BK0002", "BK0003", "BK0004", "BK0005"]))).

순서 세트가 생성됩니다.

이제 주어진 트랜잭션을 원한다면 인덱스를 사용하여 해당 항목 세트를 선택할 수 있습니다

. Print ( "Transaction No", Bankstatement [1], "성공적으로 기록되었습니다")

이것은 다음과 같은 출력을 제공합니다

거래 NO BK0002가 성공적으로 기록되지 않았습니다

그러나 누군가가 이미 기록 된 거래를 추가하고 싶다면 ‘BK0004’? 우리가 목록을 사용했다면이 조치가 가능했을 것입니다. 다행히도, 주문 세트는 그것을 허용하지 않습니다. 다음 코드를 실행합시다

Banktrs.추가 ( "bk0004") print (banktrs)

인쇄 문의 결과는 변경되지 않은 상태로 남아 있으며, 순서 세트가 조치를 무시했음을 증명합니다

OrderedSet ([ 'bk0001', 'bk0002', 'bk0003', 'bk0004', 'bk0005']))))

이 기능은이 경우 특히 유용합니다. 프로그래머로서 각 데이터 구성원이 고유한지 확인하는 것에 대해 걱정할 필요가 없습니다.

주문 세트 패키지에는 다른 주목할만한 기능이 포함되어 있습니다. 운영자를 사용하여 차이, 교차 및 노조와 같은 유용한 작업을 수행 할 수 있습니다 -, & 그리고 |.

작업을 설정합니다

두 개의 은행 명세서를 나타낼 수있는 두 개의 다른 순서 세트를 만들기 위해 프로그램을 다시 작성해 봅시다.

ordered_set import orderedset bankstatement1 = orderedset ([ "bk0001", "bk0002", "bk0003", "bk0004", "bk0005"]) bankstatement2 = orderedset ([ "bk0004", "bk0005", "bk0007", "bk0008"))))

우리는 두 진술에 BK0004 및 BK0005 거래를 의도적으로 포함시켰다. 첫 번째와

1. 파이썬에서 순서 세트의 목적은 무엇입니까??
Python에서 정렬 된 세트는 데이터 삽입 순서를 보존하는 데 사용되며, 이는 은행 거래 처리와 같은 시나리오에서 중요합니다.
2. 세트는 파이썬에서 순서 세트와 어떻게 다른가??
파이썬의 세트는 요소의 순서를 보존하지 않지만 순서 세트는.
삼. 파이썬에서 순서 세트를 어떻게 만들 수 있습니까??
Ordered-Set 패키지에서 OrderedSet 클래스를 사용하여 Python에서 순서 세트를 만들 수 있습니다. 먼저 패키지가 설치되어 있는지 확인한 다음 클래스를 가져오고 원하는 요소가있는 객체를 만듭니다.
4. 순서 세트에 중복 요소를 추가하려고하면 어떻게됩니까??
순서 세트는 중복 요소를 허용하지 않으므로 중복 요소를 추가하려고 시도하면 세트가 변경되지 않습니다.
5. 파이썬에서 순서 세트를 사용하면 몇 가지 장점은 무엇입니까??
순서 세트를 사용하면 한 가지 장점. 또한 데이터 삽입 순서가 보존되어 데이터를 분석하고 처리하는 데 유용 할 수 있습니다.
6. Union 및 순서 세트와의 교차로와 같은 세트 작업을 수행 할 수 있습니까??
예, 순서 세트 패키지를 사용하면 운영자를 사용하여 차이, 교차 및 노조와 같은 설정 작업을 수행 할 수 있습니다.
7. 순서 세트에서 특정 요소에 어떻게 액세스 할 수 있습니까??
요소의 인덱스를 사용하여 순서 세트의 특정 요소에 액세스 할 수 있으며, 목록에서 요소에 액세스하는 것과 유사합니다.
8. Python에 기본적으로 포함 된 OrderedSet 클래스입니다?
아니요, OrderedSet 클래스는 기본적으로 Python에 포함되지 않습니다. 사용하려면 순서 패키지를 설치해야합니다.
9. 주문 세트 패키지의 기능이 파이썬 버전과 독립적으로 변경 될 수 있습니까??
예, 주문 세트 패키지의 기능은 사용중인 파이썬 버전과 별개입니다. 독립적으로 업데이트하고 변경할 수있는 타사 패키지입니다.
10. Python에 주문 세트 패키지를 어떻게 설치할 수 있습니까??
터미널의 PIP 명령을 사용하여 Python에 주문 세트 패키지를 설치할 수 있습니다.

Java는 정렬 명령을 유지합니다

표준 세트와 달리 순서 세트의 데이터 순서가 보존됩니다. 우리는 프로그램 과정에서 유지 될 데이터를 입력 한 순서가 필요할 때 순서 세트를 사용했습니다. 순서 세트에서 데이터를 보면 순서대로 세트에서와 같이 순서가 변경되지 않습니다.

파이썬 순서 세트 : 개요

프로그래밍은 주로 데이터 처리에 관한 것입니다. 파이썬 개발자로서, 당신’목표와 일치하는 방식으로 데이터를 저장하는 방법을 찾으십시오. 때때로, 당신’예를 들어 은행 거래를 처리하는 경우 세트에서 데이터 삽입 순서를 보존해야합니다. 각 거래는 고유해야하며 거래가 생성되는 순서를 보존하는 것이 중요합니다. 파이썬’s 순서 세트는 그렇게하는 데 도움이됩니다.

이 기사에서는 Python 프로그램에서 하나를 만드는 방법을 보여주기 전에 순서 세트의 프로그래밍 개념을 설명합니다.

파이썬의 세트는 무엇입니까??

파이썬 프로그래밍 언어에서 세트는 고유 한 요소 모음입니다. 정의되지 않은 요소 순서가있는 해시 테이블 기반 데이터 구조입니다. 세트를 찾아 볼 수 있습니다’S 요소, 추가 또는 제거 및 연합, 교차, 보완 및 차이의 표준 세트 작업을 수행합니다.

목록과 달리 일반 세트는 요소를 삽입하는 순서를 보존하지 않습니다. 세트의 요소는 일반적으로 나타나는 순서로 저장되지 않기 때문입니다.

주문 세트는 무엇입니까??

표준 세트와 달리 순서 세트의 데이터 순서가 보존됩니다. 우리는 프로그램 과정에서 유지 될 데이터를 입력 한 순서가 필요할 때 순서 세트를 사용했습니다. 순서 세트에서 데이터를 보면 순서대로 세트에서와 같이 순서가 변경되지 않습니다.

파이썬에서 순서 세트를 만드는 방법

Python은 프로그램에서 순서 세트를 만들 수 있습니다. 아래에서’LL은 그렇게하는 두 가지 방법을 보여줍니다 : 파이썬 사용’에스 주문 세트 패키지 및 수동 방법. 그러나 먼저하자’s 컨텍스트를 설정합니다. 허락하다’s 당신이 말한다’요약 문서에서 거래 번호를 다시 기록 해야하는 은행 용 앱 개발. 각 은행 거래 운영은 고유합니다.

또한 데이터 세트에 정확하게 반영되도록 거래가 이루어지는 순서를 원합니다. 이것은 당신이 사용할 수있는 완벽한 기회입니다 주문 세트 수업은 파이썬에 포함되어 있습니다’에스 ordered_set 패키지.

파이썬’s 순서 세트 클래스

Python에서 순서 세트를 만드는 가장 간단한 방법은 OrderedSet 클래스를 사용하는 것입니다. 이 클래스는 기본적으로 포함되지 않습니다. 먼저 당신이 가지고 있는지 확인해야합니다 주문 세트 패키지가 설치되었습니다.

주목하십시오 주문 세트 타사 패키지이며 기능은 파이썬 버전과 독립적으로 변경 될 수 있습니다’다시 사용합니다. 패키지를 설치하려면 터미널에 다음 명령을 입력하십시오

PIP 설치 주문 세트

이렇게하면 OrderedSet 클래스를 사용할 수 있습니다.

이제 OrderedSet 클래스를 사용하는 Python 프로그램을 만들 수 있습니다. 허락하다’s 간단한 순서 세트가 어떻게 보이는지 볼 수 있습니다

ordered_set import orderedset settest = orderedset ([ "First", "Second", "Second", "Third"]) print (settest)

먼저 새로 설치된 Ordered_Set 패키지를 가져옵니다. 그런 다음 OrderedSet 클래스에서 객체를 생성하여 멤버를 매개 변수로 전달합니다. 이 예제의 인쇄 문은 다음을 출력합니다

OrderedSet ([ 'First', 'Second', 'Third'])))))

문자열 ‘두번째’ 세트를 만들 때 두 번 입력 한 것은 이제 사라졌으며 데이터를 입력 한 순서는 유지됩니다.

자,하자’s 순서대로 은행 거래 세트를 만듭니다. 실제 시나리오에서는 거래 순서를 유지하고 거래를 분석하고 사기를 확인하는 등을 원할 것입니다. 다음은 프로그램이 어떻게 보이는지입니다

Ordered_set import OrderedSet Bankstatement = OrderedSet ([ "BK0001", "BK0002", "BK0003", "BK0004", "BK0005"]))).

순서 세트가 생성됩니다.

이제 주어진 트랜잭션을 원한다면 인덱스를 사용하여 해당 항목 세트를 선택할 수 있습니다

. Print ( "Transaction No", Bankstatement [1], "성공적으로 기록되었습니다")

이것은 다음과 같은 출력을 제공합니다

거래 NO BK0002가 성공적으로 기록되지 않았습니다

그러나 누군가가 이미 기록 된 거래를 추가하고 싶다면 “BK0004”? 우리가 목록을 사용했다면이 조치가 가능했을 것입니다. 다행히도, 주문 세트는 그것을 허용하지 않습니다. 허락하다’s 다음 코드를 실행합니다

Banktrs.추가 ( "bk0004") print (banktrs)

인쇄 문의 결과는 변경되지 않은 상태로 남아 있으며, 순서 세트가 조치를 무시했음을 증명합니다

OrderedSet ([ 'bk0001', 'bk0002', 'bk0003', 'bk0004', 'bk0005']))))

이 기능은이 경우 특히 유용합니다. 프로그래머로서, 당신은 이겼습니다’각 데이터 구성원이 고유한지 확인하는 것에 대해 걱정해야합니다.

주문 세트 패키지에는 다른 주목할만한 기능이 포함되어 있습니다. 운영자를 사용하여 차이, 교차 및 노조와 같은 유용한 작업을 수행 할 수 있습니다 -, &이었다 그리고 |.

작업을 설정합니다

허락하다’s 프로그램을 다시 작성하여 두 개의 은행 명세서를 나타내는 두 개의 다른 순서 세트를 생성합니다.

ordered_set import orderedset bankstatement1 = orderedset ([ "bk0001", "bk0002", "bk0003", "bk0004", "bk0005"]) bankstatement2 = orderedset ([ "bk0004", "bk0005", "bk0007", "bk0008"))))

우리는 두 진술에 BK0004 및 BK0005 거래를 의도적으로 포함시켰다. 첫 번째와 두 번째 진술이 부분적으로 같은 기간을 다루면 그렇습니다.

BankStatement1에만 존재하는 트랜잭션을보고 싶다면 다음과 같은 코드를 실행하십시오

diff = bankstatement1 -bankstatement2 print ( "첫 번째 요약에 고유 한 트랜잭션", diff)

이것은 우리에게 다음과 같은 결과를 제공합니다

첫 번째 요약에 고유 한 트랜잭션은 주문 세트입니다 ([ 'BK0001', 'BK0002', 'BK0003'])

가독성 목적 으로이 코드를 사용하여 데이터를 표시 할 때 순서 세트 인터를 목록 내에서 동봉 할 수 있습니다

diff = bankstatement1 -bankstatement2 print ( "첫 번째 요약에 고유 한 트랜잭션은", list (diff))

이제 두 진술에 존재하는 트랜잭션 만 검색 해야하는 경우 교차로 진술서를 사용하십시오

inter = bankstatement1 & bankstatement2 print ( "두 요약에 공통적 인 트랜잭션", list (inter))

너’의도 한 결과를 얻을 수 있습니다

두 요약 모두에 공통적 인 거래는 주문 세트 [ 'bk0004', 'bk0005']입니다

마지막으로, 두 문의 모든 거래를 보려면 단순히 Union Operation을 수행하십시오

Union = Bankstatement1 | BankStatement2 Print ( "다음은 이러한 요약의 모든 거래입니다.", Lis (Union))

이것은 다음과 같은 출력을 제공합니다

다음은 다음과 같은 요약의 모든 거래입니다. OrderedSet [ 'BK0001', 'BK0002', 'BK0003', 'BK0004', 'BK0005', 'BK0006', 'BK0007', 'BK0008']]]

Ordered_set 패키지는 파이썬으로 순서 세트를 작성하고 조작하는 것 간단하고 효과적입니다.

매뉴얼 방법

주문한 데이터 세트를 완전히 수동으로 만들 수도 있습니다. 주문 세트 패키지를 사용할 수없는 경우에도 여전히이 해결 방법을 사용할 수 있습니다. 허락하다’이 방법이 어떻게 작동하는지 확인하십시오.

먼저, 우리’ll 데이터 세트가 포함 된 문자열 배열을 만듭니다

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

그런 다음 각 요소를 확인하는 루프를 만듭니다. 있으면 세트에서 제거됩니다. 이것을 테스트하기 위해, 우리’LL 배열에 의도적으로 중복 요소를 포함시킵니다.

범위 내 문자열 (Len (Bankstatement), 1, -1) : 은행 스테이트에서 은행 스테이트 [String-1] if bankstatement [: String-1] : Bankstatement.팝 (String-1)

for 루프는 목록 뒷면에서 반복을 시작합니다. 즉, 마지막 요소에서. 해당 요소 (위의 문자열이라고 함)를 사용하고 목록의 하위 집합에 이미 존재하는지 확인합니다 하지만 현재 요소 (문자열) 포함하지 않음. 이미 존재하는 경우 목록의 전면에 더 가까운 요소에 대한 언급을 제거하지만 요소에 대한 원래 언급을 목록 뒷면에 더 가깝게 유지합니다.

이제 배열 컨텐츠를 인쇄하면 중복이 없으며 순서가 유지됩니다

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

이를 통해 파이썬을 사용할 수없는 경우에도 순서 세트를 만들 수 있습니다’S 전용 기능!

온라인으로 코드를 배우십시오

Python은 순서 세트를 만들기위한 몇 가지 옵션을 갖춘 다목적 프로그래밍 언어입니다. OrderedSet 클래스를 사용하여 작업을 완료하거나 필요한 경우 수동으로 수행 할 수 있습니다.

파이썬에서 주문 세트 제작을 넘어서고 싶습니다?

udacity’Nanodegree 프로그램 프로그래밍에 대한 전문가가 디자인 한 소개는 다음 단계입니다. 이 과정이 끝날 무렵, 당신은 당신입니다’ll 코딩의 기본 사항을 알고 HTML, CSS, Python 등을 사용하여 실제 프로그래밍 시나리오를 자신있게 관리하는 기술이 있습니다!

완전한 코드 예제

예 1 : 은행 거래 주문 세트 생성

ordered_set import orderedset bankstatement = orderedset ([ "bk0001", "bk0002", "bk0003", "bk0004", "bk0005"]) print ( "Transaction No", Bankstatement [1], "성공적으로 기록되었습니다").추가 ( "bk0004") print (banktrs)

예 2 : Direcee, Union, 교차로

ordered_set import orderedset bankstatement1 = orderedset ([ "bk0001", "bk0002", "bk0003", "bk0004", "bk0005"]) bankstatement2 = orderedset ([ "bk0004", "bk0005", "bk0006", "bk0007") diffstatem8 ")). 첫 번째 요약에 고유 한 것은 ", list (diff)) inter = bankstatement1 & bankstatement2 print입니다 ("두 요약에 공통적 인 트랜잭션은 ", list (inter)) Union = bankstatement1 | BankStatement2 print ( "다음은 다음과 같은 요약의 모든 거래입니다.", List (Union))

예 3 : 매뉴얼 방법

BankStatement = [ "BK0001", "BK0002", "BK0003", "BK0004", "BK0004", "BK0005", "BK0006", "BK0006"] 범위 내 문자열 (Len (Bankstatement), 1, -1) : 은행 스테이 맨에 은행 1]이 있다면 [: String-1] :.팝 (String-1) 인쇄 (은행 스테이트)

Java는 정렬 명령을 유지합니다?

Java Set는 주문을 유지합니까?? 메소드가 나에게 세트를 반환하고 데이터가 주문되었지만 세트를 반복하면 데이터가 변하지 않습니다. 이것을 관리하는 더 좋은 방법이 있습니까?? 세트가 아닌 다른 것을 반환하려면 메소드를 변경해야합니까??

30.6K 27 27 금 배지 91 91은 배지 100 100 청동 배지

2012 년 5 월 25 일 10:27에 요청했습니다

user840930 user840930

5,084 21 21 골드 배지 62 62은 배지 93 93 청동 배지

“요소는 특정 순서로 반환되지 않습니다 (이 세트가 보증을 제공하는 일부 클래스의 인스턴스가 아닌 한).”세트의 반복자 방법이 말하는 것입니다. 여기에서 찾았습니다

2012 년 5 월 25 일 10:29

13 답변 13

세트 인터페이스는 주문 보증을 제공하지 않습니다.

하위 인터페이스 SortedSet은 일부 기준에 따라 정렬되는 세트를 나타냅니다. Java 6에는 SortedSet을 구현하는 2 개의 표준 컨테이너가 있습니다 . 그것들은 treeset 및 concurrentskiplistset입니다 .

SortedSet 인터페이스 외에도 LinkedHashSet 클래스도 있습니다. 요소가 세트에 삽입 된 순서를 기억하고 해당 순서대로 요소를 반환합니다.

10.9K 10 10 금 배지 70 70은 배지 94 94 청동 배지

2012 년 5 월 25 일 10:30에 응답했습니다

483K 107 107 골드 배지 943 943은 배지 1007 1007 브론즈 배지

또한 Java 8의 다른 문자열 해싱으로 인해 세트 및 맵에서 기본값 (소송되지 않은) 주문이 변경됩니다. 분류되지 않은 주문에 의존하면 코드는 Java 8에서 다르게 행동합니다.

2014 년 11 월 17 일 16:15

나는 순서대로 수업이 정상이라는 것을 알지만, 내가 기대했던 행동은 그들이 소개 될 때 그것들을 떠나서 질서를 엉망으로 만들지 않았으며, 대신 집계 될 때마다 요소를 뒤섞습니다. 귀하의 솔루션은 최적의 시들어가 아닙니다. 왜냐하면 그들이 도입 한 것과 같은 방식으로 정렬되도록 전체 구조를 구현해야하기 때문입니다

2019 년 2 월 25 일 8:39

@white_king : 세트는 “삽입 순서”라는 개념을 포함하지 않는 수학적 개념이므로 Java 인터페이스가 컨벤션을 따르는 것이 합리적입니다. 순서 세트가 있지만 순서는 관계 (Java의 비교기)에 의해 지정되며, 세트 이론의 정의를 Java의 정의와 다시 일치시킵니다. 삽입 순서를 유지하는 데 대한 귀하의 기대는 아마도 목록에서 나오지만 세트는 목록이 아닙니다.

2019 년 8 월 9 일 10:53

4,396 11 11 금 배지 34 34은 배지 58 58 청동 배지

2012 년 5 월 25 일 10:29에 답변

Xiaofeng.Li Xiaofeng.리

8,117 2 2 골드 배지 23 23 실버 배지 30 30 청동 배지

목록은 세트가 아닙니다 (회원의 고유성을 보장하지 않습니다).

2013 년 6 월 6 일 22:03

많은 비즈니스 고유 케이스 목록에서 설정 대신 주문을 유지하는 데 사용할 수 없습니다. LinkedHashset은 주문을 유지하고 고유 한 저장.

2015 년 7 월 9 일 15:34

많은 회원들이 사용을 제안했듯이 LinkedHashSet 컬렉션의 순서를 유지합니다. 이 구현을 사용하여 세트를 랩핑 할 수 있습니다.

SINTEDSET 구현은 정렬 된 순서에 사용될 수 있지만 목적으로 사용합니다 LinkedHashSet.

또한 문서에서,

“이 구현은 트리 셋과 관련된 비용 증가를 발생시키지 않고 해시 세트가 제공하는 불특정, 일반적으로 혼란스러운 순서로부터 고객을 아프게합니다. 원래 세트의 구현에 관계없이 원본과 동일한 순서를 가진 세트의 사본을 생성하는 데 사용할 수 있습니다. “

유지 관리 순서를 설정합니다?

해시로 인해 요소가 해시에서 얻을 때 삽입 된 순서가 검색 중에 유지되지 않습니다. 해시 세트는 해싱이라는 메커니즘을 사용하여 요소를 저장합니다. LinkedHashset을 사용하여 주어진 작업을 달성 할 수 있습니다. LinkedHashSet 클래스는 이중 연결 목록을 구현하여 모든 요소를 ​​통과 할 수 있습니다.

예:

입력 : HashsetInput = 산출: 해시 프린트 = 입력 : HashsetInput = 산출: 해시 프린트 =

해시 세트를 사용한 구현 : (주문되지 않음)

통사론:

Hashset Num = New Hashset ();

접근하다:

  1. 해시 세트 객체를 만듭니다.
  2. 해시 세트에 여러 요소를 삽입하십시오.
  3. 해시 세트를 인쇄하십시오.(명령이 유지되지 않음)

아래는 위의 접근 방식의 구현입니다

Gmamaladze / A_README.MD

많은 사람들이 순진하게 평범한 것으로 가정합니다 .순 해시 세트는 삽입 순서를 보존합니다. 실제로 해시 세트는 실수로 일부 요소를 제거하고 다시 수용 할 때까지 삽입 순서를 보존합니다. Java에는 순서를 존중하고 O (1) RW Time을 가진 데이터 구조가 있습니다.

아니요, (작동) 해당 구현을 찾지 못했습니다 .그물. 그게 내가 이것을 썼다.

구현은 사전과 함께 연결된 목록을 사용하여 반복, 순서를 정의하고 동시에 O (1) 제거 허용.

주문은입니다 ~ 아니다 요소가있는 경우 영향을받습니다 다시 삽입 세트에 그것은 오래된 위치입니다.

이 코드는 MIT 라이센스에 따라 배포됩니다. 저작권 (C) 2013 George Mamaladze는 라이센스를 참조하십시오.txt 또는 http : // opensource.조직/라이센스/mit-license.PHP

이 파일에는 아래에 나타나는 것과 다르게 해석되거나 컴파일 될 수있는 양방향 유니 코드 텍스트가 포함되어 있습니다. 검토하려면 숨겨진 유니 코드 문자를 드러내는 편집기에서 파일을 엽니 다. 양방향 유니 코드 문자에 대해 자세히 알아보십시오

//이 코드는 MIT 라이센스에 따라 배포됩니다. 저작권 (C) 2013 George Mamaladze
// 라이센스를 참조하십시오.txt 또는 http : // opensource.조직/라이센스/mit-license.PHP
시스템 사용 . 컬렉션;
시스템 사용 . 컬렉션 . 일반적인;
네임 스페이스 GMA . 데이터 구조
공개 계급 주문 세트 < T >: iCollection
사적인 재생의 유명한 < T , LinkedListNode < T >> m_dictionary;
개인 링크리스트리스트 < T >m_linkedList;
public orderedset ()
: 이것은 (평등 comparer < T >. 기본 )
>
공개 주문 세트 (iequalitycomparer < T >비교)
m_dictionary = 새로운 사전 < T , LinkedListNode < T >> (비교);
m_linkedList = 새로운 링크드리스트 < T >();
>
공개 int 수
얻다
>
공개 가상 BOOL ISREADONLY
얻다
>
무효 Icollection < T >. 추가 (T 항목)
아이템 추가 ) ;
>
public void clear ()
m_linkedList . 분명한 ( ) ;
m_dictionary . 분명한 ( ) ;
>
Public Bool 제거 (T 항목)
LinkedListNode < T >노드;
bool found = m_dictionary . trygetValue (항목, OUT 노드);
만약에 ( ! 발견) 거짓을 반환합니다
m_dictionary . 제거 (항목);
m_linkedList . 제거 (노드);
진실을 반환하십시오
>
공개 ienumerator < T >getEnumerator ()
m_linkedList를 반환합니다 . getEnumerator ();
>
ienumerator ienumerable . getEnumerator ()
return getEnumerator ();
>
Public Bool은 (T 항목)
m_dictionary를 반환하십시오 . 함유 (항목);
>
public void copyto (t [] array, int arrayindex)
m_linkedList . COPYTO (Array, ArrayIndex);
>
Public Bool Add (T 항목)
if (m_dictionary . containskey (item)) false를 반환합니다
LinkedListNode < T >노드 = m_linkedList . addlast (항목);
m_dictionary . 추가 (항목, 노드);
진실을 반환하십시오
>
>
>

이 파일에는 아래에 나타나는 것과 다르게 해석되거나 컴파일 될 수있는 양방향 유니 코드 텍스트가 포함되어 있습니다. 검토하려면 숨겨진 유니 코드 문자를 드러내는 편집기에서 파일을 엽니 다. 양방향 유니 코드 문자에 대해 자세히 알아보십시오

//이 코드는 MIT 라이센스에 따라 배포됩니다. 저작권 (C) 2013 George Mamaladze
// 라이센스를 참조하십시오.txt 또는 http : // opensource.조직/라이센스/mit-license.PHP
시스템 사용;
시스템 사용 . 컬렉션 . 일반적인;
시스템 사용 . LINQ;
네임 스페이스 GMA . 데이터 구조
공개 클래스 OrderedSetext < T >: orderedset < T >, ISET
public orderedsetext ()
>
Public OrderedSetext (iequalitycomparer < T >비교)
:베이스 (비교)
>
공개 ORDEDSETEXT (IENUMERABLE < T >수집 )
: 이것은 (수집, 평등 동반자 < T >. 기본 )
>
공개 ORDEDSETEXT (IENUMERABLE < T >컬렉션, iequalitycomparer < T >비교)
: 이것은 (비교)
foreach (t in exuction)
아이템 추가 ) ;
>
>
///
/// 현재 세트를 수정하여 현재 세트와
/// 지정된 컬렉션.
///
/// 현재 세트와 비교할 컬렉션.
/// NULL입니다.
공공 공간 연합 (ienumerable < T >다른 )
if (Other == null) 새로운 ArgumentNullexception ( “기타”)을 던지십시오
foreach (다른 요소)
추가 (요소);
>
>
///
/// 지정된 컬렉션에있는 요소 만 포함되도록 현재 세트를 수정합니다.
///
/// 현재 세트와 비교할 컬렉션.
/// NULL입니다.
공공 공간 교차 (ienumerable < T >다른 )
foreach (다른 요소)
if (includes (요소)) 계속;
제거 (요소);
>
>
///
/// 현재 세트에서 지정된 컬렉션의 모든 요소를 ​​제거합니다.
///
/// 세트에서 제거 할 항목 모음.
/// NULL입니다.
공공 공간을 제외하고 (ienumerable < T >다른 )
foreach (다른 요소)
제거 (요소);
>
>
///
/// 현재 세트를 수정하여 현재 세트 또는 현재 세트에 존재하는 요소 만 포함되도록 수정합니다
/// 지정된 컬렉션이지만 둘 다 아닙니다.
///
/// 현재 세트와 비교할 컬렉션.
/// NULL입니다.
공개 void symmetricexceptswith (ienumerable < T >다른 )
if (Other == null) 새로운 ArgumentNullexception ( “기타”)을 던지십시오
foreach (다른 요소)
if (포함 (요소))
제거 (요소);
>
또 다른
추가 (요소);
>
>
>
///
/// 세트가 지정된 컬렉션의 하위 집합인지 결정합니다.
///
///
/// 현재 세트가 서브 세트 인 경우; 그렇지 않으면, 거짓.
///
/// 현재 세트와 비교할 컬렉션.
/// NULL입니다.
공개 bool issubsetof (ienumerable < T >다른 )
if (Other == null) 새로운 ArgumentNullexception ( “기타”)을 던지십시오
var OtherHashset = New Hashset < T >( 다른 ) ;
다른 해시 세트를 반환하십시오 . issupersetof (this);
>
///
/// 현재 세트가 지정된 컬렉션의 슈퍼 세트인지 결정합니다.
///
///
/// 현재 세트가 SuperSet이면; 그렇지 않으면, 거짓.
///
/// 현재 세트와 비교할 컬렉션.
/// NULL입니다.
공개 bool issupersetof (ienumerable < T >다른 )
if (Other == null) 새로운 ArgumentNullexception ( “기타”)을 던지십시오
다른 반환 . 모두 (포함);
>
///
/// 현재 세트가 지정된 컬렉션의 올바른 슈퍼 세트인지 결정합니다.
///
///
/// 객체가 올바른 슈퍼 세트 인 경우 true
///; 그렇지 않으면, 거짓.
///
/// 현재 세트와 비교할 컬렉션.
/// NULL입니다.
공개 bool ispropersupersetof (ienumerable < T >다른 )
if (Other == null) 새로운 ArgumentNullexception ( “기타”)을 던지십시오
var OtherHashset = New Hashset < T >( 다른 ) ;
다른 해시 세트를 반환하십시오 . ispropersubsetof (this);
>
///
/// 현재 세트가 지정된 컬렉션의 속성 (엄격한) 하위 집합인지 결정합니다.
///
///
/// 현재 세트가 올바른 하위 집합 인 경우; 그렇지 않으면, 거짓.
///
/// 현재 세트와 비교할 컬렉션.
/// NULL입니다.
공개 bool ispropersubsetof (ienumerable < T >다른 )
if (Other == null) 새로운 ArgumentNullexception ( “기타”)을 던지십시오
var OtherHashset = New Hashset < T >( 다른 ) ;
다른 해시 세트를 반환하십시오 . ispropersupersetof (this);
>
///
/// 현재 세트가 지정된 컬렉션과 겹치는지 여부를 결정합니다.
///
///
/// 현재 세트가 하나 이상의 공통 요소를 공유하는 경우 true; 그렇지 않으면, 거짓.< /td>
///
/// 현재 세트와 비교할 컬렉션.
/// NULL입니다.
공개 부울 겹침 (ienumerable < T >다른 )
if (Other == null) 새로운 ArgumentNullexception ( “기타”)을 던지십시오
if (count == 0) false를 반환합니다
다른 반환 . 어떤 (포함);
>
///
/// 현재 세트와 지정된 컬렉션에 동일한 요소가 포함되어 있는지 결정합니다.
///
///
/// 현재 세트가 같은 경우; 그렇지 않으면, 거짓.
///
/// 현재 세트와 비교할 컬렉션.
/// NULL입니다.
공개 부리 세트 (public bool setequals) (ienumerable < T >다른 )
if (Other == null) 새로운 ArgumentNullexception ( “기타”)을 던지십시오
var OtherHashset = New Hashset < T >( 다른 ) ;
다른 해시 세트를 반환하십시오 . setequals (this);
>
>
>

이 파일에는 아래에 나타나는 것과 다르게 해석되거나 컴파일 될 수있는 양방향 유니 코드 텍스트가 포함되어 있습니다. 검토하려면 숨겨진 유니 코드 문자를 드러내는 편집기에서 파일을 엽니 다. 양방향 유니 코드 문자에 대해 자세히 알아보십시오

//이 코드는 MIT 라이센스에 따라 배포됩니다. 저작권 (C) 2013 George Mamaladze
// 라이센스를 참조하십시오.txt 또는 http : // opensource.조직/라이센스/mit-license.PHP
#영역 중고 네임 스페이스
시스템 사용;
시스템 사용 . 컬렉션 . 일반적인;
시스템 사용 . 세계화;
시스템 사용 . LINQ;
Microsoft 사용 . 비주얼 스튜디오 . TestTools . 단위 테스트;
#endregion
네임 스페이스 GMA . 데이터 구조 . 시험
내부 클래스 명령
공개 const 문자 분리기 = ‘;’ ;
비공개 판독 작업 M_OPERATION;
개인 Readonly t m_item;
공개 명령 (운영 작동, T 항목)
m_operation = 작동;
m_item = 항목;
>
공개 무효 실행 (ISET < T >세트 )
스위치 (m_operation)
케이스 작동 . 추가하다 :
세트 . 추가 (m_item);
부서지다 ;
케이스 작동 . 제거하다 :
세트 . 제거 (m_item);
부서지다 ;
케이스 작동 . 분명한 :
세트 . 분명한 ( ) ;
부서지다 ;
기본 :
새로운 NotsupportedException (String . 형식 ( “Operation []은 지원되지 않습니다. “, m_operation);
>
>
공개 정적 명령 < T >구문 분석 (문자열 토큰)
var prefixchar = 토큰 [0];
var itemtext = 토큰 . 서브 스트링 (1);
var 작동 = Chartooperation (접두사);
t 항목 =
! 끈 . ISNULLOREMPTY (itemText)
? (t) 변환 . changetype (itemtext, typeof (t))
: 기본값 (t);
새 명령을 반환합니다 < T >(작동, 항목);
>
비공개 정적 작동 차트 루터 (char ch)
스위치 (CH)
CASE ‘+’:
반환 작업 . 추가하다 ;
사례 ‘-‘ :
반환 작업 . 제거하다 ;
사례 ‘#’ :
반환 작업 . 분명한 ;
기본 :
새로운 NotsupportedException (String . 형식 ( “Operation []은 지원되지 않습니다. “, ch);
>
>
>
내부 열거 작업
추가하다 ,
제거하다 ,
분명한
>
[TestClass]
공개 계급 OrderedSetTest
[ 시험 방법 ]
public void empty ()
const String input = “”;
const string expected = “”;
testx (입력, 예상);
>
[ 시험 방법 ]
공개 void add_one ()
const String input = “+1;”;
const string export = “1”;
testx (입력, 예상);
>
[ 시험 방법 ]
공개 void add_many ()
const String input = “+1; +2; +3; +4; +5; +6”;
const string expected = “1; 2; 3; 4; 5; 6”;
testx (입력, 예상);
>
[ 시험 방법 ]
public void add_many_then_clear ()
const String input = “+1; +2; +3; +4; +5; +6;#”;
const string expected = “”;
testx (입력, 예상);
>
[ 시험 방법 ]
public void add_many_then_clear_then_add ()
const String input = “+1; +2; +3; +4; +5; +6;#;+4; +3; +2;”;
const string export = “4; 3; 2”;
testx (입력, 예상);
>
[ 시험 방법 ]
public void adds_and_removes_mixed ()
const String input = “+1; +2; +3; +4; -2; -3; +2; +3; +5”;
const string expected = “1; 4; 2; 3; 5”;
testx (입력, 예상);
>
개인 void testx (문자열 입력, 문자열 예상)
ISET < int >set = new OrderedSetext < int >();
execute (set, input);
AsserTset (예상, 세트);
>
개인 무효 assertset < T >(문자열이 예상됩니다 < T >실제)
var expactedArray =
예상되는
. 분할 (명령 < int >. 분리기)
. 여기서 (s => ! 끈 . isnullorempty (들)
. (Token => 변환을 선택하십시오 . changetype (토큰, typeof (t)))
. 깁스 < T >();
assertenumerables (ExpactedArray, 실제);
>
비공개 정적 무효 인식 ASSERTENUMERABLE < T >(ienumerable < T >예상, ienumerable < T >실제)
문자열 분리기 = 명령 < T >. 분리 기호 . Tostring (Cultureinfo . 불변의 배양);
문자열 예상 텍스트 = 문자열 . 가입 (분리기, 예상 . (항목 => 변환을 선택하십시오 . Tostring (항목)));
문자열 actualText = String . 가입 (분리기, 실제 . (항목 => 변환을 선택하십시오 . Tostring (항목)));
주장하다 . areequal (예상 텍스트, 실제 텍스트);
>
Private Void Execute (ISET < int >세트, 문자열 프로그램)
var 명령 =
프로그램
. 분할 (명령 < int >. 분리기)
. 여기서 (s => ! 끈 . isnullorempty (들)
. 선택 (명령 < int >. 구문 분석);
foreach (명령의 var 명령)
명령 . 실행 (세트);
>
>
>
>