사용자 기본값에서 목록을 검색하고이 목록에없는 임의의 번호를 생성하여이 번호를 목록에 추가하고 다시 저장하려고합니다.Swift - 검색된 목록에없는 임의의 번호 생성
내 기능은 다음과 같습니다
func createRandiAndSaveNumberToCell()->Double{
var defaults = NSUserDefaults.standardUserDefaults()
var numbersList: [Int] = []
if let firstNameIsNotNill = defaults.objectForKey("usedNumbersList") as? [Int] {
numbersList = defaults.objectForKey("usedNumbersList") as [Int]
}
var randomNumb = Int(arc4random_uniform(10))
while contains(numbersList, randomNumb){
randomNumb = Int(arc4random_uniform(10))
}
numbersList.append(randomNumb)
defaults.setObject(numbersList, forKey: "usedNumbersList")
var randi = Double(randomNumb)
println(numbersList)
return randi
}
을이이 같은 목록을 반환 : 첫 번째 목록으로
[13, 26, 75, 35, 57, 23, 6, 0, 74, 69, 38, 30, 3, 29, 52, 62, 46, 42, 37, 55, 65, 9, 18, 49, 15, 40, 71, 20, 44, 67, 43, 21, 33, 59, 8, 1, 63, 68, 2, 5]
을, 모든 번호가 추가되고, 그것은 또한 전에 3 개 개의 숫자를 추가합니다 이 번호. 숫자가 반복되지 않더라도, 내가 찾던 결과가 아니므로이 임의의 숫자를 생성하는 함수가 잘못된 것처럼 보이는지 알아야합니다.
진행 방법에 대한 의견을 보내 주시면 감사하겠습니다.
테스트 해 보셨습니까? 그것은 작동하는지 확인하는 가장 쉬운 방법 인 것 같습니다 : P 또한, 올바르게 작동하는 것처럼 보입니다. while 루프를 사용하고 목록에없는 하나가 될 때까지 숫자를 계속 생성하십시오. 그게 니가 의미하는 것 같아. – Kendel
"이 숫자 앞에 3 개의 숫자를 더하십시오"라고 설명해주십시오. 조금 더 설명이 맞지 않습니다. 또한, 작성된 것처럼이 코드는 너무 멀리 떨어져 있지 않지만 조금만 최적화 할 수 있습니다. 가장 큰 문제는 0에서 9 사이의 임의의 숫자를 선택하는 것이며 반환 된 목록의 숫자는 훨씬 높습니다. 이 함수를 11 번 호출하면 무한 루프가 발생합니다. –
배열 대신 사전을 생각해보십시오. 키는 고유하며 키가 이미 있는지 테스트 할 수 있습니다. –