สร้างอาร์เรย์ของตัวอักษรและตัวเลขทั้งหมด


95

การใช้ทับทิมสามารถสร้างอาร์เรย์ของตัวอักษรแต่ละตัวและ 0-9 ได้อย่างง่ายดายหรือไม่?

คำตอบ:


147
[*('a'..'z'), *('0'..'9')] # doesn't work in Ruby 1.8

หรือ

('a'..'z').to_a + ('0'..'9').to_a # works in 1.8 and 1.9

หรือ

(0...36).map{ |i| i.to_s 36 }

( Integer#to_sวิธีการแปลงตัวเลขเป็นสตริงที่แสดงในระบบตัวเลขที่ต้องการ)


2
มีชื่อเฉพาะสำหรับตัว*ดำเนินการที่ใช้ในบริบทนี้หรือไม่ เป็นเรื่องใหม่สำหรับฉัน
Michael Burr

1
@Michael เสี้ยนประกอบเครื่องหมาย ดูที่นี่และที่นี่
Nakilon

4
โปรดระบุคำตอบว่าตัวอย่างโค้ด * จะทำงานใน Ruby 1.9 แต่ไม่ใช่ใน Ruby 1.8
Zabba

2
@Zabba คุณระบุไว้ในความคิดเห็นของคุณ .. )
Nakilon

3
การเปรียบเทียบภายใต้ Ruby 2.1 [* ('a' .. 'z'), * ('0' .. '9')] เร็วกว่า (0 ... 36) เพียงเล็กน้อยแผนที่ {| i | i.to_s 36} (1.450000s เทียบกับ 2.26000s โดยที่ n = 100,000) หากต้องการรวม upcase ให้ใช้ดังต่อไปนี้: [* ('a' .. 'z'), * ('A' .. 'Z'), * ('0' .. '9')]
เวียด

34

สำหรับตัวอักษรหรือตัวเลขคุณสามารถสร้างช่วงและวนซ้ำได้ ลองทำสิ่งนี้เพื่อรับแนวคิดทั่วไป:

("a".."z").each { |letter| p letter }

ในการดึงอาร์เรย์ออกมาให้ลองทำดังต่อไปนี้:

("a".."z").to_a


7

ลองสิ่งนี้:

alphabet_array = [*'a'..'z', *'A'..'Z', *'0'..'9']

หรือเป็นสตริง:

alphabet_string = alphabet_array.join

3
letters = *('a'..'z')

=> ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"]


แม้ว่าสิ่งนี้อาจตอบคำถาม แต่ก็ไม่มีคำอธิบายเกี่ยวกับรหัสของคุณ โปรดอัปเดตคำตอบของคุณเพื่อให้คำอธิบายว่าคุณกำลังทำอะไรอยู่ ขอบคุณ!
Miroslav Glamuzina


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.