Computer >> 컴퓨터 >  >> 프로그램 작성 >> Ruby

Ruby 세트 – 예제, 연산자 및 방법

루비 세트란 무엇인가요?

집합은 배열과 같은 항목을 저장하는 클래스입니다...

그러나 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}

이렇게 하면 두 세트에서 공통적인 요소를 얻을 수 있습니다. Ruby 세트 – 예제, 연산자 및 방법 이 3개의 연산자(합집합, 차, 교집합)는 배열에도 사용할 수 있습니다.

상위 집합 및 부분 집합

상위 집합은 다른 집합의 모든 요소를 ​​포함하는 집합입니다. .

한 세트가 다른 세트의 상위 세트인지 확인할 수 있습니다.

좋아요 :

Set.new(10..40) >= Set.new(20..30)

범위 10..40 20..30 포함 그 안에.

하위 집합 다른 세트의 일부로 만들어진 세트입니다:

Set.new(25..27) <= Set.new(20..30)

정렬된 집합을 사용하는 방법

항상 정렬된 상태를 유지하는 세트를 원하는 경우 SortedSet를 사용할 수 있습니다. 수업.

이 클래스를 사용하기 위한 몇 가지 요구 사항이 있습니다.

  1. 집합에 추가하는 개체는 구현해야 합니다 <=> 메서드.
  2. 객체는 서로 비교 가능해야 합니다. (정수와 정수 또는 문자열과 문자열 비교)

다음은 예입니다.

sorted_numbers = SortedSet.new

sorted_numbers << 5
sorted_numbers << 2
sorted_numbers << 1

sorted_numbers
# SortedSet: {1, 2, 5}

동영상 튜토리얼 설정

요약

더 나은 성능과 더 쉬운 코딩을 위해 Ruby에서 집합을 사용하는 방법을 배웠습니다. 또한 배열과 집합의 차이점에 대해서도 배웠습니다.

이 기사가 유용했다면 더 많은 사람들이 찾을 수 있도록 공유해 주세요 🙂

읽어주셔서 감사합니다!