MaxBy()หลายคุณลักษณะของวัตถุอยู่ในรายการ()

0

คำถาม

บอกว่าฉันมีรายชื่อของหนังสือ

val books = List(Book)

อยู่ไหน Book(bookID: String, bookName: String) และแผนที่

val scores = Map(bookID -> score:float)

ฉันอยากจะเอาหนังสือกับอันสูงสุด score ก่อนแล้วเรียงลำดับตัวอักษรโดย bookName

ได้หนังสือกับคนได้รับอันดับสูงสุดคะแนนคือค่อนข้างง่าย:

val bestBook = books.maxBy(x => score(x.bookID))

แต่ในกรณีของหลายหนังสือกับเดียวกันคะแนนผมก็เหมือนจะเรียงลำดับตาม@title:menu ง bookName. ฉันไม่แน่ใจว่าเพื่อเพิ่มเป็นสอง criterion ต้อง maxBy? ฉันคิดว่าฉันสามารถ maxBy() คะแนนอนแรกก็ฉันเก็บคะแนนของ bestBookและตัวกรอง books กับแม็กคะแนนแล้ว minBy() คน bookName?

แต่มันดูเหมือนจริงๆ cumbersome มีอีกวิธีที่มีประสิทธิภาพของทำแบบนี้? ฉันเคยเห็นมาก่อนหน้านี้เธรดว่ามีบางอย่างที่คล้ายกันกับ Ordering ที่แยกกำหนด: Language กำลังจะออกคำสั่งโดยหลายค่าแต่ฉันไม่สามารถหาวิธีที่จะนิยาม Ordering ในสถานการณ์แบบนี้

implicit maxby scala
2021-10-23 09:21:53
1

คำตอบที่ดีที่สุด

3

ใช้ maxBy โดยทั้งสองคนที่สูงขึ้นคะแนน(ต้องขอบคุณ - บคะแนน)และบอกชื่อ:

books
  .maxBy(b => (-score(b.bookId), b.name))

เหมือนกำลังจะออกคำสั่งอยู่ tuple สามารถถูกใช้สำหรับการเรียงลำดับถ้าต้องการ

2021-10-23 15:43:26

อ่าฉันไม่คิดอย่างนั้นหรอกแต่ในแง่ของการแสดงไม่ใช่ sortBy จะต้องเป็นโอ(nlog n)ขณะที่ maxBy เป็นโอ(n)(ฉันคิดว่า?)
jeb2

ใช่,คุณสามารถใช้วิธีเดียวกันกับ maxBy เป็น tuple.
Gaël J

ไม่ขอแนะนำแบบสำหรับเรียบง่ายแม็กซ์ดำเนินงานการ)กิบัติงานอยู่
Tim

แน่นอนลงโพสต์:)
Gaël J

ในภาษาอื่นๆ

หน้านี้อยู่ในภาษาอื่นๆ

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................