튜플이 무엇인지 설명하고 현실 세계 시나리오에서이를 사용하는 방법을 알려 주시기 바랍니다. 이것이 내 코딩 경험을 풍부하게하는 방법을 알고 싶습니다.튜플을 언제, 어떻게 사용합니까?
답변
이 msdn article은 예제와 함께 매우 잘 설명합니다. "튜플은 특정 숫자와 요소 시퀀스가 "인 데이터 구조입니다.
튜플은 일반적으로 4 가지 방법으로 사용됩니다
는 하나의 데이터 집합을 나타냅니다. 예를 들어 튜플은 데이터베이스 레코드를 나타내는 일 수 있으며 그 구성 요소는 레코드의 개별 필드 을 나타낼 수 있습니다.
데이터 세트에 쉽게 액세스하고 조작 할 수 있도록.
매개 변수 (C#) 또는
ByRef
매개 변수 (Visual Basic)를 사용하지 않고 메서드에서 여러 값을 반환하려면.단일 매개 변수를 통해 메서드에 여러 값을 전달할 수 있습니다. 예제의 경우
Thread.Start(Object)
메서드에는 이라는 단일 매개 변수를 사용하여 스레드가 시작 시간에 실행하는 메서드에 하나의 값을 제공 할 수 있습니다. 메서드 으로Tuple<T1, T2, T3>
개체를 제공하면 스레드의 시작 루틴에 개의 데이터 항목을 제공 할 수 있습니다.
튜플은 사용자 정의 클래스를 만들 필요없이 하나의 개체로 가능한 다른 유형의 여러 값을 결합 할 수 있습니다. 이것은 예를 들어 세 개의 관련 값을 리턴하지만 새 클래스를 작성하지 않으려는 메소드를 작성하려는 경우에 유용 할 수 있습니다.
일반적으로 클래스를 만들어야 각 속성에 유용한 이름을 지정할 수 있습니다. 속성이 Item1
이라고 때문에 광범위하게 튜플을 사용하는 코드를 신속하게 읽을 수 없게됩니다 Item2
, Item3
, 등
튜플 클래스는 개발자가 특정 사용을 위해 특정 클래스를 정의하지 않음으로써 '신속하고 게으른'이 될 수 있습니다.
속성 이름은 Item1, Item2, Item3 ...이며 일부 경우 또는 문서가없는 경우 의미가 없습니다.
튜플 클래스에는 강력한 형식의 일반 매개 변수가 있습니다. Tuple 클래스의 사용자는 일반 매개 변수 유형에서 추론 할 수 있습니다.
어쩌면 C# 7에서이 튜플 대신에 클래스/개체를 쉽게 만들 수 있었을 것입니다. –
튜플과 클래스의 차이점은 튜플에 속성 이름이 없다는 것입니다. 이것은 거의 결코 좋은 일이 아니며, 추상 수학 공식과 같이 인수가 무의미 할 때만 튜플을 사용합니다. 5,6,7 차원 이상의 추상 미적분은 좌표에 대한 튜플을 취할 수 있습니다.
간단한 배열을 사용하는 것만으로는 충분하지 않은이 경우 (아마도 값의 유형이 같은 경우)? 튜플을 사용하면 몇 가지 이점이 있습니까? –
유형은 쉽게 다를 수 있지만 IComparable 구현이 동질적인 경우에 이점이 될 수 있다고 생각합니다. 당신이 말했듯이, 나는 더 간단한 시나리오를 위해 배열을 사용하고자한다. – Kaido
아주 좋은 대답입니다! –
튜플 유형에 대해 알아야 할 가장 중요한 사항입니다. 튜플은 클래스가 아니라 구조체입니다. 따라서 관리 힙에 할당됩니다. 할당 된 각 클래스 인스턴스는 가비지 수집의 부담을 가중시킵니다.
참고 : 속성 Item1, Item2 및 세터가 없습니다. 할당 할 수 없습니다. Tuple은 일단 메모리에 생성되면 변경되지 않습니다.
_ "부담"_ - 가비지 수집 문제를 본 적이 있습니까? – Gusdor
물론입니다! 네트워크 통신 처리 코드에 대해 생각해보십시오. 그것은 메모리를 할당하고 할당 해제하므로 GC가 2 분마다 실행되고 완료하는 데 몇 초가 걸릴 수 있습니다. 하류의 데이터가 실시간으로 해당 데이터에 의존한다면 이는 용인 할 수없는 일입니다. 운전 경로 앱과 같은 실시간 앱을 실행하는 휴대 기기와 같은 리소스 제약 장치가 또 다른 예입니다. – stuckintheshuck
- 1. 글꼴 : 언제, 어떻게 사용합니까?
- 2. @package 사용 언제 어떻게 사용합니까?
- 3. 언제 사용합니까?
- 4. 언제 BPEL과 ESB를 사용합니까?
- 5. touchmove와 mousemove를 언제 사용합니까?
- 6. QueueUserAPC()를 언제 사용합니까?
- 7. 페이스 북은 언제 어떻게 access_token을 사용합니까?
- 8. 클로저를 언제 사용합니까?
- 9. 언제 테이블 클러스터를 사용합니까?
- 10. IOC 용기는 언제 사용합니까?
- 11. 언제 let rec를 사용합니까?
- 12. requestAnimationFrame을 언제 사용합니까?
- 13. I2C에서 platform_driver를 언제 사용합니까?
- 14. MVC3 지역을 언제 사용합니까?
- 15. SAPI는 언제 사용합니까?
- 16. time_nanosleep을 언제 사용합니까?
- 17. 언제 sIFR을 사용합니까?
- 18. 상태 패턴을 언제 사용합니까?
- 19. Velocity를 언제 사용합니까?
- 20. wsgen을 언제 사용합니까?
- 21. IBOutlet을 언제 사용합니까?
- 22. 언제 ByteString을 사용합니까?
- 23. htmlspecialchars() 함수를 언제 사용합니까?
- 24. 정확히 언제 UrlEncode를 사용합니까?
- 25. ASP.NET, 비동기, 언제 사용합니까?
- 26. WYSIWYG 편집기를 언제 사용합니까?
- 27. 나침반 부분은 언제 사용합니까?
- 28. JUnit에서 '이론'은 언제 사용합니까?
- 29. Stringbuffer, Stringbuilder 언제 사용합니까?
- 30. ko.utils.unwrapObservable을 언제 사용합니까?
2 개의 값과 각각 다른 유형, 즉 문자열, int에 최대로 사용합니다. 그렇지 않으면 당신이 쓸 수있는 최악의 코드가되고있다. – Ondra
클래스/모듈 내에서만 개인적으로 사용하는 것이 더 바람직 할 수 있습니다. 또한 복잡한 유형 ("고객", "직원"등)을 포함하는 튜플 사용법은 프리미티브보다 조금 더 간단 할 수 있습니다. Tuple을 많이 사용하는 것보다 더 나쁜 것은 없습니다. –