[iOS Dev] NSSortDescriptor
Sorting หรือการเรียงลำดับ เนื้อหาสำคัญในวิชา Computer Science 101 (ประเทศไทยเหมือนะจะเรียนในวิชา Data Structure) แต่ในความเป็นจริงแล้ว เมื่อไหร่กันที่คุณต้องการรู้ว่า "เราจะเขียน Quicksort ยังไง ?"
การมี NSSortDescriptor หลายอันจะช่วยในกรณีที่ข้อมูลที่เราเรียงลำดับในรอบแรกมีค่าเท่ากัน ก็จะเรียก NSSortDescriptor ตัวถัดไปแล้วเรียงตามกฎเกณฑ์อื่นที่เราได้เขียนไว้ นั่นเอง
มาดูตัวอย่างกันสักหน่อย โดยกำหนด Person Object ที่มี Property ทั้งหมด 3 ตัวประกอบด้วย firstname และ lastname เป็น NSString* และ age เป็น NSUInteger นะ
นี่คือ Data ที่ใช้ทดสอบ
มาดูตัวอย่างการใช้งาน NSSortDescriptor กับข้อมูลด้านบนกันนะ
เราสามารถพบการใช้งาน NSSortDescriptor มากมายใน Foundation และในที่อื่นๆ ของระบบ และเป็นเครื่องมือที่น่าสนใจใน Core Data ด้วย และเมื่อคุณต้องทำการเรียงลำดับให้ทำการหลักการด้านบนเพื่อเลือกตัวแปรสำหรับ SortDescriptor ให้เหมาะสม
Reference: NSHipster
เมื่อเราสร้าง 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
Comments
Post a Comment