당신이 루비에서 난수&문자열을 생성하는 방법을 배우고 싶은 경우에,당신은 바로 이곳에있어.
즉,이 문서에 대해 정확히 무엇 때문에!
임의의 숫자로 배열에서 임의의 요소를 선택하고 목록에서 승자를 선택하고 주사위 롤 등을 생성 할 수 있습니다.
루비에서는 다양한 속성을 가진 난수를 생성하는 많은 방법이 있습니다.
예를 들어…
랜드 방법은 3 가지 방법으로 사용할 수 있습니다:
- 인수없이
rand
는 0&1 사이의 부동 소수점 숫자를 제공합니다(예:0.4836732493) - 정수 인수(
rand(10)
)0&사이의 새 정수를 얻습니다.범위의 시작&범위의 끝
루비에서 임의성을 생성하는 다른 방법은 다음과 같습니다:
- 배열#셔플 방법
- 배열#샘플 방법
- 보안 랜덤 클래스
몇 가지 예를 살펴 보겠습니다!
난수 생성
랜드 방법을 사용하여 루비 난수를 생성 할 수 있습니다.:
랜드는 인수없이 호출 된 경우 부동 소수점 숫자(0.4836732493
)를 생성합니다.
인수를rand
에 전달하여 0 에서 시작하여 해당 숫자까지(제외)숫자를 생성 할 수 있습니다.
rand 100> 41
루비 난수 생성은 정말 쉽지만 숫자가 0 에서 시작하는 대신 특정 범위에 있어야한다면 어떨까요?
문제가 아닙니다!
범위를 사용하여 필요한 것을 정확하게 얻을 수 있습니다.
예:
rand 200..500> 352
보안 루비 난수
랜드에 의해 생성 된 숫자는 간단한 응용 프로그램에 충분할 수 있습니다…
…하지만 암호 재설정 토큰을 생성하는 것과 같은 보안 목적으로 사용하려는 경우 루비 표준 라이브러리의 일부인 보안 난수를 사용해야합니다.이 경우 암호 생성기를 사용하여 암호 생성기를 사용하여 암호 생성기를 생성 할 수 있습니다.
다음은 예입니다:
require 'securerandom'SecureRandom.random_number> 0.232
이rand
처럼 많이 작동 볼 수 있듯이,당신은 또한 최대 수에 전달할 수 있습니다.
예:
SecureRandom.random_number(100)> 72
보안 난수에는 다른 출력 형식을 사용할 수 있습니다.
hex
을 사용하면 16 진수 고정 너비 문자열을 생성할 수 있습니다.
SecureRandom.hex> "87694e9e5231abca6de39c58cdfbe307"
루비 2.5 는 임의의 영숫자 문자열을 생성하는 새로운 방법을 도입했습니다:
SecureRandom.alphanumeric> "PSNVXOeDpnFikJPC"
배열에서 임의의 요소를 선택하는 방법
지금:
목록에서 임의의 선택을 얻을 수 있습니다.
당신은 이것을 시도 할 수 있습니다:
.shuffle.first> 30
하지만 루비는이 작업에 더 적합하고 빠른 샘플 방법을 가지고 있습니다:
.sample> 5
범위에 대한 샘플을 사용할 수 있습니다.이 코드는 임의의 문자를 생성합니다:
('a'..'z').to_a.sample> b
정수 인수를 샘플에 전달하여 배열에서 고유 한 요소를 얻을 수 있습니다:
.sample(2)>
사용자 지정 임의 생성기를 인수로 전달할 수도 있습니다:
.sample(random: SecureRandom)
루비 임의의 문자열
궁극적 인 임의성 응용 프로그램은 사용자 정의 문자 세트와 임의의 문자열을 생성하는 것입니다. 여기에 코드가 있습니다:
def generate_code(number) charset = Array('A'..'Z') + Array('a'..'z') Array.new(number) { charset.sample }.joinendputs generate_code(20)
여기에 몇 가지 일이 있습니다.
먼저 범위를 사용하여 문자 집합을 준비하고 배열로 변환합니다. 그런 다음 블록으로Array.new
을 호출하는 것을 활용합니다.
이 코드는TufwGfXZskHlPcYrLNKg
형식의 문자열을 생성합니다.
필요에 맞게 문자 집합을 조정할 수 있습니다.
시드 난수 생성기
rand
과 같은 방법을 사용할 때 생성되는 숫자를 제어하려면 시드를 설정할 수 있습니다.
씨앗은 무엇입니까?
시드는 난수의 시퀀스를 시작하는 숫자입니다.
생성 된 모든 숫자는이 시드에서 파생됩니다.
그래서 시드의 품질이 일반적으로 난수의 좋은 시퀀스를 생성하는 열쇠입니다.
루비는 이미 당신을 위해 그것을 처리하지만(추가 보안이 필요한 경우SecureRandom
사용)일부 시나리오(주로&디버깅 테스트)에서는이 시드를 직접 설정할 수 있습니다.
srand
방법으로 이 작업을 수행할 수 있습니다.
Kernel.srand(1)
이 씨앗을 사용하면 생성기가 어떤 숫자를 줄지 정확히 알 수 있습니다.
시드로 숫자 1:
Array.new(5) { rand(1..10) }#
시드를 다시 1 로 설정하면 시퀀스는 6,9,10 등에서 시작됩니다.
결론
그게 다야! 이제 루비 프로그램에서 임의성을 사용할 준비가 되었습니다.
친구와 공유하기&새로운 것을 놓치지 않도록 내 뉴스 레터를 구독하십시오!