Array in Objective-C & How to shuffle members

กุมภาพันธ์ 4, 2010 at 12:45 am ใส่ความเห็น

Class Array container ในภาษา Objective-C คือ NSArray และ NSMutableArray (จริงๆมีอีกอย่างคือ NSArrayController แต่ตอนนี้ยังมีอยู่ใน Cocoa เท่านั้น ไม่มีใน iPhone) ซึ่งความต่างระหว่าง NSArray และ NSMutableArray ก็คือ “ความสามารถในการแก้ไขภายหลังการ Initialize แล้ว” พูดง่ายๆ NSArray มี access attribute เป็น read-only แต่ NSMutableArray เป็น read-write นั่นเอง

คำถามต่อมาคือ “แล้วใช้ตัวไหนดี?” คำตอบก็คือ “ใช้ได้ทั้งคู่ครับ แตกต่างกันที่ Performance เล็กน้อยเท่านั้น” โดยส่วนตัวผมใช้ตามความสะดวก ถ้าจำเป็นต้อง read-write ก็ใช้ NSMutableArray ซึ่งการใช้งาน NSMutableArray ก็ดูตาม Document ได้เลย

อย่างที่บอกว่า NSMutableArray สามารถแก้ไขหลังจาก Initialize ได้ ดังนั้นแน่นอนว่า “ต้อง sort ได้ด้วย” ซึ่งใน Entry นี้ผมจะนำเสนอการ sort แบบ Random ผมต้องการ sort members ใน mutable array แบบสุ่ม ผมสามารถทำได้ดังนี้

int randomSort(id obj1, id obj2, void *context ) {
    // returns random number -1 0 1
    return (arc4random()%3 - 1);
}

- (void)shuffle {
    // call custom sort function
    NSMutableArray *puzzles = [NSMutableArray arrayWithObject:@"1", @"2", @"3", @"4", @"5", nil];
    [puzzles sortUsingFunction:randomSort context:nil];

    NSLog(@"Members after shuffle = %@", puzzles); 
}

จากโค้ด ผมสร้าง mutable array ขึ้นมา 1 ชุดแล้วสั่งให้ sort ด้วยฟังก์ชั่น randomSort ซึ่งใน randomSort จะทำการสุ่มค่า 3 ค่า คือ -1, 0, 1 ซึ่ง -1 หมายถึง การเรียงแบบตามลำดับ(NSOrderAscending) 0 หมายถึง การเรียงแบบปกติ (NSOrderSame) และ 1  หมายถึงการเรียงแบบกลับด้าน(NSOrderDescending) ซึ่งฟังก์ชั่น sort จะจัดลำดับของ member แต่ละตัวจากผลที่ได้จากสุ่มนั่นเอง

ส่วน arc4random เป็นฟังก์ชั่นสุ่มของ ภาษา C ครับ การใช้คำสั่ง rand() หรือ random() มันเป็นการสุ่มที่ไม่ dynamic เท่าไหร่นัก ผลลัพธ์ที่ได้จากการสุ่มจะเหมือนกันทุกครั้ง

เพียงเท่านี้เราก็สามารถสุ่มสมาชิกใน mutable array ได้แล้ว นอกจากนี้ยังมีการ sort อื่นๆได้อีกนะครับ เจออันไหนน่าสนใจผมจะมาแนะนำอีกใน Entry ต่อๆไปนะครับ

#reference http://stackoverflow.com/questions/56648/whats-the-best-way-to-shuffle-an-nsmutablearray

Entry filed under: Cocoa Programming, Computer, iPhone Programming. Tags: , , , , , , .

XCode custom template [MV Review] ห่างกันซักพัก – Waii Playgirl

ใส่ความเห็น

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  เปลี่ยนแปลง )

Google photo

You are commenting using your Google account. Log Out /  เปลี่ยนแปลง )

Twitter picture

You are commenting using your Twitter account. Log Out /  เปลี่ยนแปลง )

Facebook photo

You are commenting using your Facebook account. Log Out /  เปลี่ยนแปลง )

Connecting to %s

Trackback this post  |  Subscribe to the comments via RSS Feed


del.icio.us For iPhone dev

Post Calendar

กุมภาพันธ์ 2010
พฤ อา
« ม.ค.   มี.ค. »
1234567
891011121314
15161718192021
22232425262728

%d bloggers like this: