작성
·
80
0
코드팩토리 디스코드에 질문하면 더욱 빠르게 질문을 받아 볼 수 있습니다!
[코드팩토리 디스코드]
https://bit.ly/3HzRzUM
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요!
- 먼저 유사한 질문이 있었는지 검색해보세요.
- 서로 예의를 지키며 존중하는 문화를 만들어가요.
- 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
안녕하세요! 강의 잘 듣고 있습니다 ㅎㅎ
다름이 아니라 Set에 대해서 추가적으로 공부하고 있는데 Set은 순서가 없는 타입이라 인덱스로 접근이 불가능하다고 알고 있습니다
근데 아래 코드를 보면
출처 https://aidenarea.tistory.com/entry/Dart-Set-%EC%B4%9D%EC%A0%95%EB%A6%AC
Set set1 = {'value1', 'value2', 'value3', 'value4'};
print(set1.elementAt(0)); // value1
인덱스를 통해 값을 가져오는 방법을 소개하고 있습니다
이건 어떻게 가능한 건지 알려주시면 감사하겠습니다!
답변 2
0
안녕하세요!
공식 문서에서 가져온 정의입니다.
볼 수 있다싶이 inherited 즉 iterable의 기능입니다.
Set는 Iterable을 implement 하기 때문에 사용이 가능해지는 것이고 말씀하신 인덱스 접근은 iterable 고유의 기능이 아니라 List의 기능일걸로 생각됩니다.
Dart 공식 문서에서는 순서가 없다고 정의돼있지 않습니다. 아래 첨부 해드리겠습니다.
감사합니다!
답변 주셔서 감사합니다 ㅎㅎ
올려주신 이미지를 보면
A HashSet is unordered, which means that its iteration order is unspecified
해시셋은 순서가 정해지지 않았다고 하는데 이 부분이 순서가 없다는 내용이 아닌지 질문드립니다(헷갈려서 재질문드립니다..! ㅠㅠ)
그리고 저 문구 외에도
또한
공식 문서에 이렇게 쓰여 있는데 확인 부탁드립니다!
답변 주셔서 감사합니다 ㅎㅎ
제 질문의 요지는 지식 공유자님께서 "Dart 공식 문서에서는 순서가 없다고 정의돼있지 않습니다."라고 말씀 주셨는데 공식 문서에 "해시셋은 순서가 정해지지 않았다" 이 부분과 제가 밑줄 친 내용에 "Dart의 세트는 고유한 항목의 순서 없는 컬렉션입니다." 이 부분에 순서가 없다고 되어 있어서 Set에 순서가 있는 건지 없는 건지 혼란스러워서 재질문 드립니다..!
추가)
또한 공식 문서를 좀 더 찾아봤는데
순서가 없어서 인덱스로 Set의 항목을 가져올 수 없다는 문장도 발견했습니다. 제가 이해를 잘못한 건지 어렵네요 ㅠㅠ
번거로우실텐데 항상 답변 주셔서 감사합니다! 미리 새해 복 많이 받으세요~
안녕하세요!
Set는 말씀하신대로 전통적으로 순서를 보장해주지 않는게 맞습니다.
하지만 Set는 다양한 implementation이 있습니다. (Dart에서 말씀드리는게 아니라 자료구조 개념에서 다양한 Set의 subset이 존재합니다.)
제가 처음 보내드린 스크린샷에서처럼 HashSet은 Unordered입니다.
LinkedHashSet은 이름에서도 알 수 있다싶이 Ordered입니다. LinkedList를 생각해보시면 됩니다.
Set의 기본 implementation은 LinkedHashSet입니다. 공학적으로 그렇다는게 아니라 Dart에서 그렇습니다.
그렇기 때문에 순서 유지가 가능합니다.
이외에 말씀하신 부분중에 틀리게 말씀하신 부분이 전혀 없습니다.
감사합니다!
아아 이해가 됐습니다 번거로우실텐데 상세한 답변 너무 감사합니다
정리하자면 원래 Set은 순서가 없는 게 맞는데 다트 언어는 기본적으로 Set이
LinkedHashSet이고 LinkedHashSet은 순서가 있다는 말씀이시군요 ㅎㅎ
0
안녕하세요, 인프런 AI 인턴입니다.
Set은 일반적으로 순서가 없는 집합을 의미하지만, Dart에서는 elementAt
메서드를 사용하여 특정 위치의 요소를 가져올 수 있습니다. 이는 Set 내부에서 데이터가 저장된 순서로 인덱스를 매겨 접근할 수 있는 방법을 제공하죠.
Dart의 Set
은 내부적으로 리스트를 사용하여 데이터를 저장하기 때문에 가능한 기능입니다. 하지만 Set
이 제공하는 유일성과 무순서성을 유지하면서, 내부 구현에서 순서를 약간 허용하는 방법이라고 이해하면 됩니다. 즉, elementAt
메서드는 특정 인덱스에 위치한 요소를 가져오는 데 유용하다고 할 수 있습니다.
추가적으로 참고하실 수 있는 관련 설명이 있는 블로그 포스트를 소개드립니다.
- Dart Set 총정리 - Aiden의 방식: 이 블로그에서는 Dart Set의 다양한 기능과 사용법을 설명하고 있으며, elementAt
메서드를 어떻게 사용하는지에 대한 예시도 포함되어 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
답변 주셔서 감사합니다! 순서 보전이 되는데
Set set1 = {'value1', 'value2', 'value3', 'value4'}; print(set1[0]);
위와 같이 인덱스를 통한 접근이 불가능한 이유가 있을까요?
그리고 분명 다트 언어의 공식 문서에는 순서가 없다고 되어 있는데 이 부분이 조금 헷갈립니다 ㅠㅠ