Array คืออะไร?
Array เป็น built-in Ruby class เก็บ list ของ zero หรือมากกว่า items มี methods ช่วย add, access, loop ผ่าน items ทั้งหมดง่ายๆ
มีประโยชน์เพราะไม่งั้นต้องใช้ variables หลายตัว
ตัวอย่าง:
a = 1 b = 2 c = 3
แทนที่จะทำ:
numbers = [1, 2, 3]
ส่วนที่ดีที่สุด? ใส่อะไรใน array ก็ได้!
เช่น:
- Numbers
- Strings
- Arrays อีกที! (multi-dimensional array)
มาเรียนรู้ arrays ให้ดีที่สุด!
สารบัญ
- 1 Arrays Are Zero-Indexed
- 2 Ruby Array Methods
- 3 แปลง Array เป็น String
- 4 Multi-Dimensional Arrays (2D Arrays และมากกว่า)
- 5 วิธี Iterate Ruby Arrays
- 6 Negative Indexing
- 7 Array Operations เพิ่มเติม
- 8 Operations กับ Multiple Arrays
- 9 สรุป
- 9.1 Related
Arrays Are Zero-Indexed
เข้าถึง elements ใน array ด้วย index เริ่มที่ 0
ถ้า array มีคำ "cat", "dog", "tiger" จะ长得像这样:

โค้ด represent ข้อมูลในรูป:
["cat", "dog", "tiger"]
现在: คุณจะค้นพบทำอะไรกับ arrays ได้บ้าง!
Ruby Array Methods
เริ่มเรียนรู้สร้าง array สร้าง empty array แล้ว add items หรือสร้าง array พร้อม starting values
Initialize empty array:
users = []
Initialize array with data:
users = ["john", "david", "peter"]
ถ้าสร้าง string-only array... หลีกเลี่ยงพิมพ์ quotes ทุก string ด้วย %w
例子:
users = %w(john david peter)
ตอนมี array เข้าถึง elements ได้
怎么做:
users[0] # First element users[1] # Second element users[2] # Third element
也用 first 和 last methods:
users.first # First element users.last # Last element
怎么 加 items 进 array:
# ทั้งคู่ effect เหมือนกัน << preferred users.push "andrew" users << "andrew"
怎么 删除 elements:
last_user = users.pop # ลบ element สุดท้าย return มัน user.delete_at(0) # ลบ element แรก
有 shift 和 unshift 类似 pop/push 但 取 加 elements 前面 array
users.unshift "robert" # 加 element 前面 array users.shift # ลบ element แรก return มัน
Array contain หรือ include item เฉพาะ?
เช็กค่าใน array Ruby:
numbers = [1,2,3] numbers.include?(2) # true numbers.include?(10) # false
Array ยาวเท่าไหร่? (คือ elements กี่ตัว)
words = ["cat", "coconut", "bacon"] words.size # 3
Cheatsheet เล็ก:
| Operation | Methods |
|---|---|
| initialize | Array.new, [], %w |
| read | [0], first, last |
| add | push, <<, unshift |
| remove | pop, delete_at, shift |
怎么 转 Array 成 String
แปลง array 成 string 用 Array#join method
例子:
letters = %w(a b c d) letters.join # "abcd"
สังเกต method รับ 1 optional parameter 定义 separator ระหว่าง elements ตอน join
letters = %w(a b c d)
letters.join(" ") # "a b c d"
อยาก reverse operation string to array 用 split method:
"a b c".split
ผล:
["a", "b", "c"]
Multi-Dimensional Arrays (2D Arrays 和更多)
Array 组成 其他 arrays 叫 multi-dimensional array
2d array 例子:
users = [ [1, 'Peter'], [2, 'Steven'] ]
เข้าถึง element แรกจาก sub-array แรก syntax นี้:
users[0][0] # 1
Element ที่ 2 ของ sub-array แรก:
users[0][1] # 'Peter'
บางกรณีอยากแปลง multi-dimensional array 成 regular array 用 flatten method:
users.flatten # [1, "Peter", 2, "Steven"]
怎么 Iterate Ruby Arrays
有 array 了 不好 么 enumerate contents 印 出来? 好消息: 能!
例子: Print array 用 each
users.each { |item| puts item }
ต้องการ value และ index 兩者 用 array's each_with_index:
users.each_with_index { |item, idx| puts "#{item} with index #{idx}" }
Note: 这些 looping operations 多 有 归功于 Enumerable module mixed into Array class by default
例子: Capitalize 每个 word 在 Array 用 map
users = users.map { |user| user.capitalize }
users = users.map(&:capitalize)
map 不 modify array in-place 只 回新 array 元素 modified 所以 assign results กลับ variable 有 map! (有 exclamation point) modify array 直接 但 simpler version preferred
另一件事 可能 想做: 找 所有 items array 符合 criteria
例子: 找 所有 数字 大于 10:
numbers = [3, 7, 12, 2, 49]
numbers.select { |n| n > 10 } # => 12, 49
Negative Indexing
เรียนรู้ เข้าถึง element array 用 indexing (或 first, last methods) แต่ negative indexing?
พูดถึง 用 -1 เป็น array index Ruby เริ่ม จาก ท้าย array -1 ได้ last item -2 ได้ second to last ฯลฯ
例子:
letters = ["a", "b", "c"] letters[-1] # "c" letters[-2] # "b"
Array Operations เพิ่มเติม
做 多 事 用 arrays 如 sorting 或 picking random elements
用 sort method sort array ใช้ได้ ถ้า strings หรือ numbers ใน array advanced sorting check out sort_by
numbers = numbers.sort
ลบ duplicate elements จาก array ถ้าทำบ่อย consider 用 Set แทน
numbers = [1, 3, 3, 5, 5] numbers = numbers.uniq # => [1, 3, 5]
สังเกต ไม่ permanently change array 多 Ruby methods 创建 新 array 有 changes 你 要 所以 save results 用 variable 或 用 uniq! method
อยาก pick random element จาก array 用 sample method:
numbers.sample
也 可能 想 "slice" array 取 portion 不是 全部
例子: 取 3 elements แรก จาก array 不 变它:
numbers.take(3) numbers[0,3]
Advanced Ruby array slicing 更多 如 要 所有 elements 但 第一:
numbers[1..-1]
สังเกต difference comma (0,3) และ range (1..-1) ตัวแรก "ให้ 3 elements เริ่ม index 0" ตัวหลัง "ให้ characters ใน range นี้"
取 array size:
numbers.size # 5
เช็ก array ว่าง:
numbers.empty? # false
ลบ nil values:
numbers << nil # [1, 3, 3, 5, 5, nil] numbers.compact # [1, 3, 3, 5, 5]
Operations กับ Multiple Arrays
有 两个 arrays 要 join 或 merge 成 一起 做 这样:
# 更快 因为 这 改变 users array users.concat(new_users) # 更慢 因为 这 创建 新 array users += new_users
ลบ elements จาก array 这样 users_to_delete 也是 array:
users = users - users_to_delete
最后 取 elements ที่ 出现 在 两个 arrays 同一时间:
users & new_users
สรุป
Ruby arrays 有用มาก และจะเป็น powerful ally ด้านข้างคุณ
ฝึกสร้าง array, 加 elements, 存取 elements by index ฯลฯ อ่าน Ruby hash อีก class สำคัญ 结合 arrays 寫更有趣 code
Practice makes perfect!
ถ้ามีประโยชน์ แชร์โพสต์ และสมัครรับ newsletter ด้านล่าง 🙂