Array

  • warning: realpath() [function.realpath]: SAFE MODE Restriction in effect. The script whose uid is 1005 is not allowed to access /tmp owned by uid 0 in /var/www/sites/sugree/codenone.com/subdomains/www/html/includes/file.inc on line 190.
  • warning: realpath() [function.realpath]: SAFE MODE Restriction in effect. The script whose uid is 1005 is not allowed to access /tmp owned by uid 0 in /var/www/sites/sugree/codenone.com/subdomains/www/html/includes/file.inc on line 190.

ตัวอย่างการใช้งาน array

x = []  #=> สร้าง arry ว่างๆ
y = Array.new #=> สร้าง array ว่างๆ อีกอัน
a = ['neo', 'trinity', 'tank'] #=> สร้าง array ขนาดเท่ากับ 3

Array เริ่มต้นที่ 0

a[0] #=> neo
a[1] #=> trinity

ดูขนาดของ Array จากคำสั่ง length และ size (คือคำสั่งเดียวกัน)

puts(a.length) #=> 3
puts(a.size) #=> 3

เราสามารถเพิ่มข้อมูลใน array ได้ตลอด

a[3] = 'morphieus'

ถ้าเติมค่าให้ array เลยตำแหน่งสุดท้าย ค่าของ size จะขยายออกไปทันที

a[6] = 'keymaker'
a.size #=> 7

ได้ค่าของ array a คือ

a = ['neo', 'trinity', 'tank', 'morphieus', nil, nil, 'keymaker']

อีกวิธีในการเพิ่มค่าให้ array คือใช้เครื่องหมาย <<

a << ‘mouse’

ค่า mouse จะไปต่อท้าย a ไม่ว่าตัวแปลสุดท้ายของ a จะเป็น nil ก็ตาม

array ใน ruby มีคำสั่ง sort และ reverse ในตัวเอง

a = [77, 10,120, 3]
a.sort # return => [3, 10, 77, 120]
 
a = [1, 2, 3]
a.reverse # return => [3, 2, 1]

สำคัญว่าคำสั่งทั้งสองไม่ได้ sort หรือ reverse ค่าใน array a เลย ทำแค่ return array ใหม่เท่านั้น ถ้าต้องการให้ a เปลี่ยนค่าไปจริงๆ ต้องเรียก method ชื่อ sort! และ reverse!

a = [77, 10,120, 3]
a.sort! # a => [3, 10, 77, 120]
 
a = [1, 2, 3]
a.reverse! # a => [3, 2, 1]

เครื่องหมาย “!” เป็นที่รู้กันในคนเขียน ruby ว่าหมายถึงการเตือนว่า method นั้นจะเปลี่ยนค่า object นั้นไปด้วย เหมือนเครื่องหมาย “?” ที่หมายถึงการถามเพื่อให้ method นั้นตอบเป็น true/false

(คนเขียน java คงคุ้นกับ “is” เราใช้เหมือน “?” ใน ruby ครับ)

ถ้าต้องการให้ a เปลี่ยนค่าไปจริงๆ ต้องเรียก method ชื่อ source! พิมพ์ผิดครับ sort!

apirak's picture

แก้เรียบร้อย ขอบคุณครับ :)

ย้าย Codenone

ประกาศย้าย Codenone ไปใช้ Forum ของ Blognone แทนครับ ตามไปตั้งกระทู้ต่อได้ที่ Codenone Forum (รายละเอียดอ่านจากกระทู้ ย้าย Codenone ไปรวมกับ Blognone)

กระทู้เก่าๆ จะย้ายตามไปในภายหลัง ตอนนี้ปิดการโพสต์กระทู้ไว้ เหลือไว้เฉพาะอ้างอิงเท่านั้น