#30 Kotlin Koans Collections/Compound tasks 해설
1 소개
Kotlin 공식 레퍼런스의 Kotlin Koans Collections/Compound tasks의 해설 기사입니다.
Kotlin Koans를 통해 Kotlin을 배우는 사람들의 도움이 되길 바랍니다.
다만, 레퍼런스를 자력으로 읽는 힘을 기르고 싶은 분은,
곧이 기사를 보지 마십시오!
일단 각자 도전하고 나서 볼 수 있다고 생각합니다
2 count()
count() : 인수로서 건네주는 조건식(predicate)을 만족하는 요소의 수를 돌려준다.
3 Collections/Compound tasks 해설
Kotlin Koans Collections/Compound tasks 의 해설입니다.
수시로 본 사이트의 내용을 인용하겠습니다.
본문과 코드를 살펴보자.
Implement Customer.getMostExpensiveDeliveredProduct() and Shop.getNumberOfTimesProductWasOrdered() using functions from the Kotlin standard library.
Compound_tasks// Return the most expensive product among all delivered products
// (use the Order.isDelivered flag)
fun Customer.getMostExpensiveDeliveredProduct(): Product? {
TODO()
}
// Return how many times the given product was ordered.
// Note: a customer may order the same product for several times.
fun Shop.getNumberOfTimesProductWasOrdered(product: Product): Int {
TODO()
}
/* TODO */
먼저 fun Customer.getMostExpensiveDeliveredProduct(): Product?
에 대해 생각해 봅시다.
한 고객(Customer)의 주문(orders) 중 배송된(isDelivered == true)상품(products) 중에서 가장 비싼(price의 값이 최대)인 것을 반환하도록 구현합니다.
따라서 다음과 같은 코드가 됩니다.
Compound_tasksfun Customer.getMostExpensiveDeliveredProduct(): Product? {
return orders.filter{it.isDelivered}.flatMap{it.products}.maxBy{it.price}
}
다음에 fun Shop.getNumberOfTimesProductWasOrdered(product: Product): Int
에 대해입니다.
인수로 전달되는 제품의 주문된 횟수를 반환하도록 구현합니다.
인수로서 건네받는 product는 호출측에 의존하므로, 모든 Product에 대응하는 설계로 할 필요가 있습니다.
따라서, 사전에 모든 Product 의 List 를 작성해 두고, 인수로서 건네받은 product 와 일치하는 횟수를 계산해 돌려주도록(듯이) 생각합니다.
(모든 Product의 List는 모든 종류의 Product가 아니라 모든 고객의 모든 주문의 모든 Product라는 의미입니다. 그래서 같은 종류의 Product가 여러 번 주문될 수도 있습니다.)
모든 Product의 List 구현은 다음과 같습니다.
(정확하게는, 1고객(Customer)의 모든 Product를 바꾸지만, 나중에 기술하는 코드로 전고객이 이하의 함수를 되찾습니다.)
Compound_tasksfun Customer.getOrderedProductsList(): List<Product> {
return orders.flatMap { it.products }
}
이 함수를 이용한 코드는 다음과 같습니다.
Compound_tasksfun Shop.getNumberOfTimesProductWasOrdered(product: Product): Int {
return customers.flatMap { it.getOrderedProductsList() }.count { it == product }
}
최종적으로 다음과 같은 구현이 됩니다.
Compound_tasks// Return the most expensive product among all delivered products
// (use the Order.isDelivered flag)
fun Customer.getMostExpensiveDeliveredProduct(): Product? {
return orders.filter{it.isDelivered}.flatMap{it.products}.maxBy{it.price}
}
// Return how many times the given product was ordered.
// Note: a customer may order the same product for several times.
fun Shop.getNumberOfTimesProductWasOrdered(product: Product): Int {
return customers.flatMap { it.getOrderedProductsList() }.count { it == product }
}
fun Customer.getOrderedProductsList(): List<Product> {
return orders.flatMap { it.products }
}
filter()/flatMap()/maxBy()에 대해 과거에 해설하고 있으므로 참고로 해 주시면 좋겠습니다.
#21 Kotlin Koans Collections/Filter map 해설
#23 Kotlin Koans Collections/FlatMap 해설
#24 Kotlin Koans Collections/Max min 해설
4 마지막으로
다음은 Kotlin Koans Collections/Get used to new style의 해설을합니다.
Reference
이 문제에 관하여(#30 Kotlin Koans Collections/Compound tasks 해설), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/G-o/items/bdeceb3f16dbe797b2d7
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
count() : 인수로서 건네주는 조건식(predicate)을 만족하는 요소의 수를 돌려준다.
3 Collections/Compound tasks 해설
Kotlin Koans Collections/Compound tasks 의 해설입니다.
수시로 본 사이트의 내용을 인용하겠습니다.
본문과 코드를 살펴보자.
Implement Customer.getMostExpensiveDeliveredProduct() and Shop.getNumberOfTimesProductWasOrdered() using functions from the Kotlin standard library.
Compound_tasks// Return the most expensive product among all delivered products
// (use the Order.isDelivered flag)
fun Customer.getMostExpensiveDeliveredProduct(): Product? {
TODO()
}
// Return how many times the given product was ordered.
// Note: a customer may order the same product for several times.
fun Shop.getNumberOfTimesProductWasOrdered(product: Product): Int {
TODO()
}
/* TODO */
먼저 fun Customer.getMostExpensiveDeliveredProduct(): Product?
에 대해 생각해 봅시다.
한 고객(Customer)의 주문(orders) 중 배송된(isDelivered == true)상품(products) 중에서 가장 비싼(price의 값이 최대)인 것을 반환하도록 구현합니다.
따라서 다음과 같은 코드가 됩니다.
Compound_tasksfun Customer.getMostExpensiveDeliveredProduct(): Product? {
return orders.filter{it.isDelivered}.flatMap{it.products}.maxBy{it.price}
}
다음에 fun Shop.getNumberOfTimesProductWasOrdered(product: Product): Int
에 대해입니다.
인수로 전달되는 제품의 주문된 횟수를 반환하도록 구현합니다.
인수로서 건네받는 product는 호출측에 의존하므로, 모든 Product에 대응하는 설계로 할 필요가 있습니다.
따라서, 사전에 모든 Product 의 List 를 작성해 두고, 인수로서 건네받은 product 와 일치하는 횟수를 계산해 돌려주도록(듯이) 생각합니다.
(모든 Product의 List는 모든 종류의 Product가 아니라 모든 고객의 모든 주문의 모든 Product라는 의미입니다. 그래서 같은 종류의 Product가 여러 번 주문될 수도 있습니다.)
모든 Product의 List 구현은 다음과 같습니다.
(정확하게는, 1고객(Customer)의 모든 Product를 바꾸지만, 나중에 기술하는 코드로 전고객이 이하의 함수를 되찾습니다.)
Compound_tasksfun Customer.getOrderedProductsList(): List<Product> {
return orders.flatMap { it.products }
}
이 함수를 이용한 코드는 다음과 같습니다.
Compound_tasksfun Shop.getNumberOfTimesProductWasOrdered(product: Product): Int {
return customers.flatMap { it.getOrderedProductsList() }.count { it == product }
}
최종적으로 다음과 같은 구현이 됩니다.
Compound_tasks// Return the most expensive product among all delivered products
// (use the Order.isDelivered flag)
fun Customer.getMostExpensiveDeliveredProduct(): Product? {
return orders.filter{it.isDelivered}.flatMap{it.products}.maxBy{it.price}
}
// Return how many times the given product was ordered.
// Note: a customer may order the same product for several times.
fun Shop.getNumberOfTimesProductWasOrdered(product: Product): Int {
return customers.flatMap { it.getOrderedProductsList() }.count { it == product }
}
fun Customer.getOrderedProductsList(): List<Product> {
return orders.flatMap { it.products }
}
filter()/flatMap()/maxBy()에 대해 과거에 해설하고 있으므로 참고로 해 주시면 좋겠습니다.
#21 Kotlin Koans Collections/Filter map 해설
#23 Kotlin Koans Collections/FlatMap 해설
#24 Kotlin Koans Collections/Max min 해설
4 마지막으로
다음은 Kotlin Koans Collections/Get used to new style의 해설을합니다.
Reference
이 문제에 관하여(#30 Kotlin Koans Collections/Compound tasks 해설), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/G-o/items/bdeceb3f16dbe797b2d7
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
// Return the most expensive product among all delivered products
// (use the Order.isDelivered flag)
fun Customer.getMostExpensiveDeliveredProduct(): Product? {
TODO()
}
// Return how many times the given product was ordered.
// Note: a customer may order the same product for several times.
fun Shop.getNumberOfTimesProductWasOrdered(product: Product): Int {
TODO()
}
/* TODO */
fun Customer.getMostExpensiveDeliveredProduct(): Product? {
return orders.filter{it.isDelivered}.flatMap{it.products}.maxBy{it.price}
}
fun Customer.getOrderedProductsList(): List<Product> {
return orders.flatMap { it.products }
}
fun Shop.getNumberOfTimesProductWasOrdered(product: Product): Int {
return customers.flatMap { it.getOrderedProductsList() }.count { it == product }
}
// Return the most expensive product among all delivered products
// (use the Order.isDelivered flag)
fun Customer.getMostExpensiveDeliveredProduct(): Product? {
return orders.filter{it.isDelivered}.flatMap{it.products}.maxBy{it.price}
}
// Return how many times the given product was ordered.
// Note: a customer may order the same product for several times.
fun Shop.getNumberOfTimesProductWasOrdered(product: Product): Int {
return customers.flatMap { it.getOrderedProductsList() }.count { it == product }
}
fun Customer.getOrderedProductsList(): List<Product> {
return orders.flatMap { it.products }
}
다음은 Kotlin Koans Collections/Get used to new style의 해설을합니다.
Reference
이 문제에 관하여(#30 Kotlin Koans Collections/Compound tasks 해설), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/G-o/items/bdeceb3f16dbe797b2d7텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)