루비 세트란 무엇인가요?
집합은 배열과 같은 항목을 저장하는 클래스입니다...
그러나 10배 더 빠르게 만드는 몇 가지 특별한 속성이 있습니다. 특정 상황에서!
게다가:
세트의 모든 항목은 고유함을 보장합니다. .
이 Ruby 튜토리얼에서는 다음을 배우게 됩니다.
- 최대의 효과를 위해 세트를 사용하는 방법 및 시기
- 집합과 배열의 차이점!
- 유용한 설정 방법 목록
시작하겠습니다!
루비 세트 예시
세트는 고유한 항목 목록을 생성하는 데 도움이 되는 Ruby 클래스입니다. .
다음은 이것이 얼마나 유용한지 보여주는 예입니다.
많은 제품 목록을 살펴보고 있다고 가정해 보겠습니다.
하지만 중복된 항목이 있습니다 이 목록에 있고 고유한 제품만 원합니다.
세트에 넣을 수 있으며 세트는 제품 목록이 항상 추가 작업 없이 고유한지 확인합니다. .
방법은 다음과 같습니다.
require 'set' products = Set.new products << 1 products << 1 products << 2 products # Set: {1, 2}
또 다른 이점은 이 목록을 검색하는 것이 매우 빠릅니다는 것입니다. :
products.include?(1) # true
검색이 일정한 시간에 이루어지기 때문에 매우 빠릅니다.
집합 대 배열 – 차이점 이해
이제 궁금해하실 수도 있습니다...
집합과 배열의 차이점은 무엇입니까?
집합은 요소에 직접 액세스할 수 없습니다.
products[0] # undefined method `[]'
이것이 가장 큰 차이점입니다.
그러나 집합은 배열로 변환될 수 있습니다 언제든지:
products.to_a # [1, 2]
집합을 사용하는 요점은 다음 두 가지 특수 속성을 사용하는 것입니다.
- 빠른 조회 시간(
include?
포함) ) - 고유한 가치
이것들이 필요하다면 세트가 당신에게 좋은 성능 향상을 줄 것입니다 , 그리고 uniq
를 호출할 필요가 없습니다. 고유한 요소를 원할 때마다 배열에서.
세트 대 어레이 벤치마크
다음은 array와 set include?
의 성능 차이를 보여주는 벤치마크입니다. 방법.
# Ruby 2.5.0 set include: 8381985.2 i/s array include: 703305.5 i/s - 11.92x slower
이러한 차이의 이유는 배열이 모든 단일 요소를 확인해야 하기 때문입니다!
100만 개의 요소 배열이 있는 경우 include?
를 호출할 때마다 100만 개의 요소를 검사하게 됩니다. .
세트는 그럴 필요가 없습니다.
루비 설정 방법
세트 사이에 수행할 수 있는 여러 연산이나 방법이 있습니다. 수학에 대한 배경 지식이 있으면 이를 인식할 수 있습니다.
연합 연산자
유용한 설정 방법 중 하나는 통합 연산자:입니다.
products | (1..10) # Set: {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
이 연산자를 사용하면 두 세트의 모든 고유한 요소를 하나의 세트로 결합할 수 있습니다.
Btw, 이것은 Set
의 개체뿐만 아니라 배열, 범위 및 해시와 같은 모든 Enumerable 개체와 함께 작동합니다. 수업.
차이 연산자
한 세트의 요소를 다른 세트에서 제거하려면 이것이 귀하의 방법입니다.
예시 :
products - (3..4) # Set: {1, 2, 5, 6, 7, 8, 9, 10}
교차로 연산자
다음은 세트 입니다. 교차 연산자:
Set.new(1..3) & Set.new(2..5) # Set: {2, 3}
이렇게 하면 두 세트에서 공통적인 요소를 얻을 수 있습니다. 이 3개의 연산자(합집합, 차, 교집합)는 배열에도 사용할 수 있습니다.
상위 집합 및 부분 집합
상위 집합은 다른 집합의 모든 요소를 포함하는 집합입니다. .
한 세트가 다른 세트의 상위 세트인지 확인할 수 있습니다.
좋아요 :
Set.new(10..40) >= Set.new(20..30)
범위 10..40
20..30
포함 그 안에.
하위 집합 다른 세트의 일부로 만들어진 세트입니다:
Set.new(25..27) <= Set.new(20..30)
정렬된 집합을 사용하는 방법
항상 정렬된 상태를 유지하는 세트를 원하는 경우 SortedSet
를 사용할 수 있습니다. 수업.
이 클래스를 사용하기 위한 몇 가지 요구 사항이 있습니다.
- 집합에 추가하는 개체는 구현해야 합니다 <=> 메서드.
- 객체는 서로 비교 가능해야 합니다. (정수와 정수 또는 문자열과 문자열 비교)
다음은 예입니다.
sorted_numbers = SortedSet.new sorted_numbers << 5 sorted_numbers << 2 sorted_numbers << 1 sorted_numbers # SortedSet: {1, 2, 5}
동영상 튜토리얼 설정
요약
더 나은 성능과 더 쉬운 코딩을 위해 Ruby에서 집합을 사용하는 방법을 배웠습니다. 또한 배열과 집합의 차이점에 대해서도 배웠습니다.
이 기사가 유용했다면 더 많은 사람들이 찾을 수 있도록 공유해 주세요 🙂
읽어주셔서 감사합니다!