หน้าเว็บ

วันพฤหัสบดีที่ 29 ตุลาคม พ.ศ. 2552

เทคนิกเล็กๆน้อยๆกับสตริง

ต้องคอยเตือนตัวเองไว้เสมอว่าเกือบทุกอย่างใน Ruby นั้นเป็นอ็อบเจกต์แทบทั้งหมด
สตริงก็เหมือนกันครับ เป็นอ็อบเจกต์
เมื่อมันเป็นอ็อบเจกต์ คุณก็น่าจะคาดได้ว่าเราสามารถเรียกใช้เมธอดของคลาสตริงจากอ็อบเจกต์ได้ด้วย เมธอดส่วนใหญ่เป็น build-in เมธอดที่ถูกกำหนดอยู่ในคลาส String ซึ่งเป็นคลาสมาตรฐานใน Ruby อยู่แล้ว เช่น
puts "string".reverse
puts "string".upcase

ผลลัพธ์ที่ออกมาก็เป็นไปตามคาด

gnirts
STRING

ที่น่าสนใจน่ะอันนี้ต่างหาก
ถ้าผมทำอย่างนี้ล่ะ พอจะเดากันออกมั้ยครับว่าจะได้ผลลัพธ์ยังไง
puts "string"[0]
puts "string"[1]
puts "string"[2]
puts "string"[3]
puts "string"[4]
puts "string"[5]
puts "string"[6]

ตอนแรกผมเดาว่าน่าจะได้ผลออกมาเป็น charecter แต่ละตัวของคำๆนี้เช่น "s", "t", ....
แต่ไม่ใช่
สิ่งที่ได้คือ ASCII โค้ดของตัวอักษรแต่ละตัวต่างหาก ซึ่งถ้าเราใส่ index ที่ไม่มีตัวอักษรในตำแหน่งนั้นเราก็จะได้ค่าเป็น nil ออกมาแทน(ตามตัวอย่างคือตำแหน่งที่ 6)

115
116
114
105
110
103
nil

พอเป็นอย่างนี้ผมก็สามารถใช้เทกนิคนี้มาใช้แปลงลำดับของตัวอักษรที่ผมอยากทำให้มันเป็น index ได้ง่ายๆยกตัวอย่างเช่น
ถ้าผมอยากแปลงตำแหน่งของระบบ row, column อย่างที่ใช้ใน Excel มาเป็นระบบคู่ลำดับ x,y เช่นตำแหน่ง A1 ก็คือ (1,1) หรือ H6 ก็คือ (8, 6) ผมก็สามารถเขียน function แปลงได้ดังนี้
def convert(cell)
  str = cell.downcase
  x = str[0] - 'a'[0]
  y = str[1] - '0'[0]
  
  return x, y
end

pos = convert("J5")
puts pos

พอจะได้ idea นะครับ
อย่างไรก็ตาม function นี้ยังมีจุดที่ต้องระวังเวลานำไปใช้ คือมันจะ work ก็ต่อเมื่อค่าของ row และ column นั้นเป็นตัวอักษรตัวเดียวเท่านั้น ถ้าเราใส่เป็น AB3 หรือ A16 อย่างงี้มันจะแสดงผลไม่ถูกต้องครับ ลองคิดต่อเล่นๆละกันครับว่าถ้าอย่างให้มันแสดงค่าได้ถูกต้องนั้นต้องทำยังไง


วันนี้พอแค่นี้ ไปก่อนล่ะครับ หุหุ



2 ความคิดเห็น:

  1. ยังมีวิธีง่ายๆอีกวิธีที่สามารถหาค่า ASCII code ของตัวอักษรใดๆได้
    นั่นคือการใส่เครื่องหมายคำถามไว้หน้าตัวอักษรที่เราต้องการ ASCII code(ไม่ต้องใส่เครื่องหมาย " ให้กับตัวอักษรนะ) เช่น

    puts ?1 # --> 49
    puts ?B # --> 66

    แต่ใช่ได้กับตัวอักษรตัวเดียวเท่านั้น
    ถ้าทำแบบนี้จะได้ข้อความแสดงข้อผิดพลาดแทน

    puts ?Bat # --> error message

    ตอบลบ
  2. Which sports are better to bet on? - Sporting 100
    It has been one of the most popular sports bet 광명 출장마사지 types 춘천 출장샵 in football history 사천 출장마사지 and this was the biggest one 토토 사이트 코드 in sports 통영 출장샵 betting.

    ตอบลบ