[iOS Dev] NSSortDescriptor

Sorting หรือการเรียงลำดับ เนื้อหาสำคัญในวิชา Computer Science 101 (ประเทศไทยเหมือนะจะเรียนในวิชา Data Structure) แต่ในความเป็นจริงแล้ว เมื่อไหร่กันที่คุณต้องการรู้ว่า "เราจะเขียน Quicksort ยังไง ?"

เมื่อเราสร้าง Apps การเรียงลำดับคืออะไรบางอย่างที่คุณจะต้องคิดว่ามันจะเร็ว เป็นฟังก์ชั่นที่ใช้ง่ายและชัดเจน และเมื่อมันมีให้ใช้ คุณจะรู้สึกถึงในถึงความยากลำบากในหาสิ่งที่ง่ายกว่า NSSortDescriptor ใน Foundation Framework

NSSortDescriptor เป็น Object ใน Objective-C ที่จะสร้างขึ้นด้วยตัวแปร (parameters) ดังนี้
  • key: สำหรับ Collection ที่จะทำการเรียงลำดับ key คือค่าจะนำมาพิจารณาในการเรียงลำดับวัตถุแต่ละตัวใน Collection
  • ascending: มีค่าเป็น Boolean ที่จะกำหนดว่าจะให้ Collection เรียงลำดับแบบไหน จากน้อยไปมาก (YES) หรือมากไปน้อย (NO)
และยังมีตัวแปรตัวที่ 3 ซึ่งจะเป็นส่งไปเป็นฟังก์ชั่นที่ไว้ใช้เปรียบเทียบค่าที่ N และค่าอื่นๆ ในขณะที่ทำการเรียงลำดับ โดยค่าเริ่มต้นจะทำการเปรียบเทียบความเท่ากัน (equality) ของวัตถุนั้นๆ ซึ่งจะส่งไปในรูปแบบของ Objective-C's Selector (SEL) หรือ NSComparator ก็ได้
เมื่อใดก็ตามที่ทำการเรียงลำดับ String อย่าลืมส่ง Selector ที่ชื่อว่า localizedStandardCompare:, เพราะมันจะช่วยให้การเรียงลำดับอิงกับกฎและรูปแบบของภาษานั้นๆ ได้อย่างถูกต้อง (เปลี่ยนไปตาม Timezone ที่อยู่)
Collections เช่น NSArray, NSSet มี methods ที่เรียงลำดับข้อมูลด้านในที่จะให้เราส่ง Array ของ NSSortDescriptor ซึ่งนั้นหมายถึง เราอาจจะทำการเรียงลำดับในหลายๆ วิธีพร้อมกันได้ โดย methods การเรียงลำดับจะทำการเรียงตามลำดับของ NSSortDescriptor ที่ส่งเข้าไป

การมี NSSortDescriptor หลายอันจะช่วยในกรณีที่ข้อมูลที่เราเรียงลำดับในรอบแรกมีค่าเท่ากัน ก็จะเรียก NSSortDescriptor ตัวถัดไปแล้วเรียงตามกฎเกณฑ์อื่นที่เราได้เขียนไว้ นั่นเอง

มาดูตัวอย่างกันสักหน่อย โดยกำหนด Person Object ที่มี Property ทั้งหมด 3 ตัวประกอบด้วย firstname และ lastname เป็น NSString* และ age เป็น NSUInteger นะ


นี่คือ Data ที่ใช้ทดสอบ


มาดูตัวอย่างการใช้งาน NSSortDescriptor กับข้อมูลด้านบนกันนะ


เราสามารถพบการใช้งาน NSSortDescriptor มากมายใน Foundation และในที่อื่นๆ ของระบบ และเป็นเครื่องมือที่น่าสนใจใน Core Data ด้วย และเมื่อคุณต้องทำการเรียงลำดับให้ทำการหลักการด้านบนเพื่อเลือกตัวแปรสำหรับ SortDescriptor ให้เหมาะสม

Reference: NSHipster

Popular posts from this blog

12 วิธี การบริการและดูแลลูกค้าในร้าน Starbucks

"อีสุกอีใส" ประสบการณ์เมื่อต้องมาเป็นตอนอายุ 22

[Android Dev] การติดตั้ง Eclipse+AndroidSDK เพื่อพัฒนาโปรแกรมบน Android