เรียงตามหลายฟิลด์
ใช้คีย์ทูเพิลและ reverse เพื่อตัดสินกรณีเสมอ
เรียงตามหลายฟิลด์ เป็นบทเรียน Coding Interview Prep ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Coding Interview Prep และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Coding Interview Prep มีบทเรียนทั้งหมด 4 บทเรียน
เมื่อคีย์เดียวไม่เพียงพอ
บางครั้งสมาชิกมีค่าเท่ากันในฟิลด์แรกและคุณต้องใช้เกณฑ์อื่นตัดสิน กรณีนี้ให้ใช้คีย์แบบทูเพิลที่ระบุฟิลด์ตามลำดับความสำคัญ
ทูเพิลถูกเปรียบเทียบจากซ้ายไปขวา
Python เปรียบเทียบทูเพิลทีละสมาชิก: จะตรวจสอบสมาชิกตัวแรก และดูตัวที่สองก็ต่อเมื่อตัวแรกเท่ากัน
print((1, 9) < (1, 2)) # False
print((1, 2) < (2, 0)) # Trueคีย์แบบทูเพิลสำหรับสองฟิลด์
ให้คืนค่าทูเพิลจาก key เพื่อเรียงตามฟิลด์แรก แล้วจึงเรียงตามฟิลด์ที่สอง วิธีนี้จะเรียงผู้คนตามอายุ แล้วจึงตามชื่อ
people.sort(key=lambda p: (p.age, p.name))ลำดับหลักและลำดับรอง
ฟิลด์ที่อยู่ซ้ายสุดคือลำดับหลัก ส่วนฟิลด์ถัดไปใช้ตัดสินเมื่อค่าเท่ากัน ปรับลำดับในทูเพิลเพื่อเปลี่ยนว่าฟิลด์ใดมีความสำคัญกว่า
data = [(2, "b"), (1, "z"), (1, "a")]
print(sorted(data))
# [(1, 'a'), (1, 'z'), (2, 'b')]ผสมการเรียงจากน้อยไปมากและจากมากไปน้อย
หากต้องการเรียงฟิลด์หนึ่งจากน้อยไปมากและอีกฟิลด์จากมากไปน้อย ให้เปลี่ยนเครื่องหมายฟิลด์ตัวเลขที่ต้องการเรียงจากมากไปน้อยภายในคีย์แบบทูเพิล
items.sort(key=lambda x: (x.group, -x.score))เคล็ดลับการเปลี่ยนเครื่องหมายใช้ได้กับตัวเลข
เคล็ดลับการใช้เครื่องหมายลบใช้ได้เฉพาะกับตัวเลข หากต้องการกลับลำดับฟิลด์ที่เป็นสตริง คุณต้องเรียงหลายรอบแทนการเปลี่ยนเครื่องหมาย
การเรียงแบบเสถียรช่วยให้เรียงเป็นชั้นได้
เนื่องจากการเรียงลำดับมีคุณสมบัติเสถียร คุณจึงเรียงด้วยคีย์รองก่อน แล้วจึงเรียงด้วยคีย์หลัก โดยค่าที่เท่ากันจะยังคงลำดับที่ถูกต้อง
rows.sort(key=lambda r: r.name)
rows.sort(key=lambda r: r.age, reverse=True)การเรียงเป็นชั้นเทียบกับทูเพิลเดียว
คีย์แบบทูเพิลเดียวจะเร็วและอ่านง่ายกว่าในกรณีทั่วไป การเรียงเป็นชั้นเหมาะเมื่อฟิลด์หนึ่งเป็นสตริงที่ต้องเรียงจากน้อยไปมาก ขณะที่อีกฟิลด์ต้องเรียงจากมากไปน้อย
itemgetter เพื่อความเร็ว
สำหรับทูเพิลที่อ้างอิงด้วยดัชนี itemgetter เป็นคีย์ที่กระชับและรวดเร็ว โดยดึงหลายฟิลด์ตามลำดับความสำคัญได้ในครั้งเดียว
from operator import itemgetter
rows.sort(key=itemgetter(1, 0))เกณฑ์ตัดสินเมื่อค่าเท่ากันทำให้ผลลัพธ์แน่นอน
การเพิ่มเกณฑ์ตัดสินสุดท้ายที่ไม่ซ้ำกัน เช่น id จะทำให้ผลลัพธ์คงที่ในทุกครั้งที่เรียกใช้ ซึ่งเป็นสิ่งที่ระบบตรวจคำตอบที่เข้มงวดให้ความสำคัญ
วางแผนคีย์ก่อนเขียนโค้ด
อ่านโจทย์แล้วจดฟิลด์ที่ต้องใช้เรียงตามลำดับ คีย์แบบทูเพิลที่ชัดเจนจะเปลี่ยนการเปรียบเทียบที่ยุ่งยากให้เป็นบรรทัดสั้น ๆ เพียงบรรทัดเดียว
ตรวจสอบอย่างรวดเร็ว
คุณต้องการเรียงนักเรียนตามคะแนนจากน้อยไปมาก แล้วจึงตามชื่อจากน้อยไปมาก
สรุป
คุณสามารถจัดการค่าที่เท่ากันด้วยคีย์แบบทูเพิล เปลี่ยนเครื่องหมายตัวเลขเพื่อเรียงจากมากไปน้อย และเรียงแบบเสถียรเป็นชั้นสำหรับทิศทางที่ผสมกัน เกณฑ์ตัดสินช่วยให้ผลลัพธ์เป็นระเบียบ ✅
คำถามที่พบบ่อย
บทเรียน “เรียงตามหลายฟิลด์” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “เรียงตามหลายฟิลด์” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Coding Interview Prep ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Coding Interview Prep มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “เรียงตามหลายฟิลด์”
ใช้คีย์ทูเพิลและ reverse เพื่อตัดสินกรณีเสมอ คุณปฏิบัติ Coding Interview Prep ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Coding Interview Prep หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Coding Interview Prep บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน
บทเรียน “เรียงตามหลายฟิลด์” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Coding Interview Prep นี้ได้ไหม
ได้ บทเรียน Coding Interview Prep ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- sorted() และฟังก์ชัน key
- เรียงตามหลายฟิลด์
- ลำดับกำหนดเองด้วย functools.cmp_to_key
- เหตุใดการเรียงก่อนจึงปลดล็อกวิธีแก้