#28 Kotlin Koans Collections/Partition 해설
1 소개
Kotlin 공식 레퍼런스의 Kotlin Koans Collections/Partition의 해설 기사입니다.
Kotlin Koans를 통해 Kotlin을 배우는 사람들의 도움이 되길 바랍니다.
다만, 레퍼런스를 자력으로 읽는 힘을 기르고 싶은 분은,
곧이 기사를 보지 마십시오!
한 번 각자로 도전하고 나서, 눈에 띄게 된다고 생각합니다
2 partition()
partition() : 컬렉션이 건네주는 인수 (predicate)의 반환 값이 true를 취하는 요소와 false를 취하는 요소의 List Pair를 생성한다 (true의 List가 Pair 클래스의 속성 first에 false의 List가 Pair 클래스의 속성 second에 할당됩니다.).
kotlin koans의 예를 인용합니다.
val numbers = listOf(1, 3, -4, 2, -11)
val (positive, negative) = numbers.partition { it > 0 }
positive == listOf(1, 3, 2)
negative == listOf(-4, -11)
val (positive,negative)
는 Destructuring Declarations 을 이용해 값의 대입이 행해지고 있습니다.
3 Collections/Partition 해설
Kotlin Koans Collections/Partition의 해설입니다.
수시로 본 사이트의 내용을 인용하겠습니다.
본문과 코드를 살펴보자.
Implement Shop.getCustomersWithMoreUndeliveredOrdersThanDelivered() using partition.
val numbers = listOf(1, 3, -4, 2, -11)
val (positive, negative) = numbers.partition { it > 0 }
positive == listOf(1, 3, 2)
negative == listOf(-4, -11)
Note that destructuring declaration syntax is used in this example.
Partition// Return customers who have more undelivered orders than delivered
fun Shop.getCustomersWithMoreUndeliveredOrdersThanDelivered(): Set<Customer> = TODO()
각 클래스의 속성은 다음과 같습니다.
Shop 클래스: name(String형), customers(List< Customer >형)
Customer 클래스: name(String형), city(City형), orders(List< Order >형)
Order 클래스: products(List< Product >형), isDelivered(Boolean형)
Shop 속성 customers의 요소 (Customer 형의 List)의 orders의 isDelivered의 진위치 마다 List를 작성해, false의 List의 요소수가 true의 List의 요소수보다 큰 Customer의 Set를 돌려주는 구현 합니다.
우선, filter() 을 이용해 전술한 falseのListの要素数がtrueのListの要素数より大きいCustomer
를 추출한 List 를 Set 로 변환하므로 다음과 같이 구현합니다.
Partitionfun Shop.getCustomersWithMoreUndeliveredOrdersThanDelivered(): Set<Customer> = customers.filter().toSet()
다음으로, filter() 내의 구현에 대해 생각해 봅시다.
oreders의 isDelivered의 각 진정한 값에 대해 List를 만듭니다.
ture의 List를 delivered
, false의 List를 undelivered
에 대입하고 각 List의 요소 수를 size 속성을 사용하여 비교하도록 구현합니다.
따라서 다음과 같은 코드가 됩니다.
Partitionfun Shop.getCustomersWithMoreUndeliveredOrdersThanDelivered(): Set<Customer> = customers.filter{
val(delivered,undelivered) = it.orders.partition{it.isDelivered}
undelivered.size > delivered.size
}.toSet()
( #18 Kotlin Koans Conventions/Destructuring declarations 해설
과거에 Destructuring declarations에 대해 해설하고 있으므로 좋으면 꼭! )
( #21 Kotlin Koans Collections/Filter map 해설
과거에 filter()에 대해 해설하고 있으므로 좋으면 꼭! )
4 마지막으로
다음은 Kotlin Koans Collections/Fold의 해설을 하겠습니다
Reference
이 문제에 관하여(#28 Kotlin Koans Collections/Partition 해설), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/G-o/items/31f9fafe199d1911b989
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
partition() : 컬렉션이 건네주는 인수 (predicate)의 반환 값이 true를 취하는 요소와 false를 취하는 요소의 List Pair를 생성한다 (true의 List가 Pair 클래스의 속성 first에 false의 List가 Pair 클래스의 속성 second에 할당됩니다.).
kotlin koans의 예를 인용합니다.
val numbers = listOf(1, 3, -4, 2, -11)
val (positive, negative) = numbers.partition { it > 0 }
positive == listOf(1, 3, 2)
negative == listOf(-4, -11)
val (positive,negative)
는 Destructuring Declarations 을 이용해 값의 대입이 행해지고 있습니다.3 Collections/Partition 해설
Kotlin Koans Collections/Partition의 해설입니다.
수시로 본 사이트의 내용을 인용하겠습니다.
본문과 코드를 살펴보자.
Implement Shop.getCustomersWithMoreUndeliveredOrdersThanDelivered() using partition.
val numbers = listOf(1, 3, -4, 2, -11)
val (positive, negative) = numbers.partition { it > 0 }
positive == listOf(1, 3, 2)
negative == listOf(-4, -11)
Note that destructuring declaration syntax is used in this example.
Partition// Return customers who have more undelivered orders than delivered
fun Shop.getCustomersWithMoreUndeliveredOrdersThanDelivered(): Set<Customer> = TODO()
각 클래스의 속성은 다음과 같습니다.
Shop 클래스: name(String형), customers(List< Customer >형)
Customer 클래스: name(String형), city(City형), orders(List< Order >형)
Order 클래스: products(List< Product >형), isDelivered(Boolean형)
Shop 속성 customers의 요소 (Customer 형의 List)의 orders의 isDelivered의 진위치 마다 List를 작성해, false의 List의 요소수가 true의 List의 요소수보다 큰 Customer의 Set를 돌려주는 구현 합니다.
우선, filter() 을 이용해 전술한 falseのListの要素数がtrueのListの要素数より大きいCustomer
를 추출한 List 를 Set 로 변환하므로 다음과 같이 구현합니다.
Partitionfun Shop.getCustomersWithMoreUndeliveredOrdersThanDelivered(): Set<Customer> = customers.filter().toSet()
다음으로, filter() 내의 구현에 대해 생각해 봅시다.
oreders의 isDelivered의 각 진정한 값에 대해 List를 만듭니다.
ture의 List를 delivered
, false의 List를 undelivered
에 대입하고 각 List의 요소 수를 size 속성을 사용하여 비교하도록 구현합니다.
따라서 다음과 같은 코드가 됩니다.
Partitionfun Shop.getCustomersWithMoreUndeliveredOrdersThanDelivered(): Set<Customer> = customers.filter{
val(delivered,undelivered) = it.orders.partition{it.isDelivered}
undelivered.size > delivered.size
}.toSet()
( #18 Kotlin Koans Conventions/Destructuring declarations 해설
과거에 Destructuring declarations에 대해 해설하고 있으므로 좋으면 꼭! )
( #21 Kotlin Koans Collections/Filter map 해설
과거에 filter()에 대해 해설하고 있으므로 좋으면 꼭! )
4 마지막으로
다음은 Kotlin Koans Collections/Fold의 해설을 하겠습니다
Reference
이 문제에 관하여(#28 Kotlin Koans Collections/Partition 해설), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/G-o/items/31f9fafe199d1911b989
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
val numbers = listOf(1, 3, -4, 2, -11)
val (positive, negative) = numbers.partition { it > 0 }
positive == listOf(1, 3, 2)
negative == listOf(-4, -11)
// Return customers who have more undelivered orders than delivered
fun Shop.getCustomersWithMoreUndeliveredOrdersThanDelivered(): Set<Customer> = TODO()
fun Shop.getCustomersWithMoreUndeliveredOrdersThanDelivered(): Set<Customer> = customers.filter().toSet()
fun Shop.getCustomersWithMoreUndeliveredOrdersThanDelivered(): Set<Customer> = customers.filter{
val(delivered,undelivered) = it.orders.partition{it.isDelivered}
undelivered.size > delivered.size
}.toSet()
다음은 Kotlin Koans Collections/Fold의 해설을 하겠습니다
Reference
이 문제에 관하여(#28 Kotlin Koans Collections/Partition 해설), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/G-o/items/31f9fafe199d1911b989텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)