Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Ruby

วิธีสร้างตัวเลขและสตริงแบบสุ่มใน Ruby

หากคุณต้องการเรียนรู้วิธีสร้างตัวเลขและสตริงแบบสุ่มใน Ruby แสดงว่าคุณมาถูกที่แล้ว

เพราะนั่นคือสิ่งที่บทความนี้เป็นเรื่องเกี่ยวกับ!

ด้วยตัวเลขสุ่ม คุณสามารถเลือกองค์ประกอบสุ่มได้ จากอาร์เรย์ เลือกผู้ชนะจากรายการ สร้างทอยลูกเต๋า ฯลฯ

ใน Ruby มีหลายวิธีในการสร้างตัวเลขสุ่มที่มีคุณสมบัติต่างๆ

ตัวอย่างเช่น…

วิธีแรนด์สามารถใช้ได้ 3 วิธี:

  • ไม่มีอาร์กิวเมนต์ rand ให้จุดลอยตัว ตัวเลขระหว่าง 0 ถึง 1 (ชอบ 0.4836732493)
  • ด้วย จำนวนเต็ม อาร์กิวเมนต์ (rand(10) ) คุณจะได้จำนวนเต็มใหม่ระหว่าง 0 และตัวเลขนั้น
  • ด้วย ช่วง อาร์กิวเมนต์ (rand(1..20) ) คุณจะได้จำนวนเต็มระหว่างจุดเริ่มต้นของช่วงและจุดสิ้นสุดของช่วง

วิธีอื่นๆ ในการสร้างการสุ่มใน Ruby ได้แก่:

  • อาร์เรย์#สุ่ม วิธีการ
  • The อาร์เรย์#ตัวอย่าง วิธีการ
  • The สุ่มปลอดภัย คลาส

มาดูตัวอย่างกัน!

การสร้างตัวเลขสุ่ม

คุณสามารถสร้างตัวเลขสุ่มทับทิมโดยใช้ แรนด์ วิธีการ:

วิธีสร้างตัวเลขและสตริงแบบสุ่มใน Ruby

Rand สร้างตัวเลขทศนิยม (0.4836732493 ) หากถูกเรียกโดยไม่มีข้อโต้แย้งใดๆ

คุณส่งอาร์กิวเมนต์ไปที่ rand . ได้ เพื่อสร้างตัวเลขเริ่มต้นจากศูนย์ถึง (แต่ ไม่รวม ) หมายเลขนั้น

rand 100
> 41

การสร้างตัวเลขสุ่มทับทิมนั้นง่ายมาก แต่ถ้าคุณต้องการให้ตัวเลขอยู่ในช่วงเฉพาะแทนที่จะเริ่มจากศูนย์ล่ะ

ไม่มีปัญหา!

คุณสามารถใช้ช่วงเพื่อให้ได้สิ่งที่คุณต้องการได้อย่างแท้จริง

ตัวอย่าง :

rand 200..500
> 352

การรักษาความปลอดภัยหมายเลขสุ่มทับทิม

ตัวเลขที่สร้างโดย rand อาจเพียงพอสำหรับแอปพลิเคชันง่ายๆ…

…แต่ถ้าคุณต้องการใช้เพื่อความปลอดภัย เช่น การสร้างโทเค็นการรีเซ็ตรหัสผ่าน คุณควรใช้ SecureRandom ซึ่งเป็นส่วนหนึ่งของไลบรารีมาตรฐาน Ruby

SecureRandom เริ่มสร้างตัวสร้างจาก /dev/urandom บนระบบ Unix และบน windows ใช้ CryptAcquireContext / CryptGenRandom API

นี่คือตัวอย่าง :

require 'securerandom'

SecureRandom.random_number
> 0.232

อย่างที่คุณเห็นมันใช้งานได้เหมือน rand คุณยังสามารถส่งต่อในจำนวนสูงสุดได้อีกด้วย

ตัวอย่าง :

SecureRandom.random_number(100)
> 72

สุ่มปลอดภัย มีรูปแบบเอาต์พุตอื่นที่พร้อมใช้งาน

การใช้ hex สามารถสร้างสตริงความกว้างคงที่ฐานสิบหกได้

SecureRandom.hex
> "87694e9e5231abca6de39c58cdfbe307"

Ruby 2.5 นำเสนอวิธีการใหม่ ซึ่งสร้างสตริงตัวอักษรและตัวเลขแบบสุ่ม:

SecureRandom.alphanumeric
> "PSNVXOeDpnFikJPC"

วิธีการเลือกองค์ประกอบแบบสุ่มจากอาร์เรย์

ตอนนี้:

คุณอาจต้องการ สุ่มเลือกจากรายการ .

คุณสามารถลองสิ่งนี้:

[5, 15, 30, 60].shuffle.first
> 30

แต่ Ruby มี ตัวอย่าง วิธีที่เหมาะสมกว่า (และเร็วกว่า) สำหรับงานนี้:

[5, 15, 30, 60].sample
> 5

คุณสามารถใช้ตัวอย่าง สำหรับช่วง รหัสนี้จะสร้างตัวอักษรแบบสุ่ม:

('a'..'z').to_a.sample
> b

คุณสามารถส่งอาร์กิวเมนต์จำนวนเต็มไปยังตัวอย่างเพื่อรับ N องค์ประกอบที่ไม่ซ้ำ จากอาร์เรย์:

[1,2,3].sample(2)
> [1, 2]

นอกจากนี้ยังสามารถส่งผ่านตัวสร้างแบบสุ่มที่กำหนดเองเป็นอาร์กิวเมนต์:

[1,2,3].sample(random: SecureRandom)

ทับทิมสุ่มสตริง

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

def generate_code(number)
  charset = Array('A'..'Z') + Array('a'..'z')
  Array.new(number) { charset.sample }.join
end

puts generate_code(20)

มีบางอย่างเกิดขึ้นที่นี่

ขั้นแรก เราเตรียมชุดอักขระของเราโดยใช้ช่วงและแปลงเป็นอาร์เรย์ จากนั้นเราก็ใช้ประโยชน์จากการโทร Array.new ด้วยบล็อก ซึ่งช่วยให้เราเริ่มต้น อาร์เรย์ขนาด n ด้วยค่าที่สร้างโดยบล็อก

รหัสนี้จะสร้างสตริงในรูปแบบต่อไปนี้: TufwGfXZskHlPcYrLNKg .

คุณสามารถปรับแต่งชุดตัวละครให้เหมาะกับความต้องการของคุณได้

การเพาะตัวสร้างตัวเลขสุ่ม

หากคุณต้องการควบคุมว่าตัวเลขใดถูกสร้างขึ้นเมื่อใช้วิธีการเช่น rand จากนั้นคุณสามารถตั้งเมล็ดพันธุ์ได้

เมล็ดอะไรคะ

เมล็ดคือตัวเลขที่เริ่มลำดับของตัวเลขสุ่ม

ตัวเลขที่สร้างขึ้นทั้งหมด มาจากเมล็ดพันธุ์นี้ .

นั่นเป็นเหตุผลว่าทำไมคุณภาพของเมล็ดพืชจึงเป็นกุญแจสำคัญในการสร้างลำดับตัวเลขสุ่มที่ดี

Ruby จัดการให้คุณแล้ว (ใช้ SecureRandom หากคุณต้องการความปลอดภัยเพิ่มเติม) แต่ในบางสถานการณ์ (ส่วนใหญ่เป็นการทดสอบและการดีบัก) คุณอาจต้องตั้งค่าเมล็ดพันธุ์นี้ด้วยตัวเอง

คุณสามารถทำได้ด้วย srand วิธีการ

ถูกใจสิ่งนี้ :

Kernel.srand(1)

ด้วยเมล็ดพันธุ์นี้ คุณจะรู้ได้อย่างชัดเจนว่าตัวสร้างจะให้ตัวเลขอะไรกับคุณ

สำหรับหมายเลข 1 เป็นเมล็ดพันธุ์ :

Array.new(5) { rand(1..10) }
# [6, 9, 10, 6, 1]

หากคุณตั้งค่าเมล็ดอีกครั้งเป็น 1 ลำดับจะเริ่มที่ 6 จากนั้น 9, 10 เป็นต้น

บทสรุป

แค่นั้นแหละ! ตอนนี้คุณพร้อมที่จะเริ่มใช้การสุ่มในโปรแกรม Ruby แล้ว 🙂

พบว่าโพสต์นี้มีประโยชน์หรือไม่

แบ่งปันกับเพื่อนของคุณและ สมัครรับจดหมายข่าวของฉัน เพื่อให้คุณไม่พลาดสิ่งใหม่ๆ!