2016-07-04 2 views
1

이 포함되어 있다고 말하고 싶습니다. 일부 2 차원 배열에 [Int, Int] 형식이 포함되어 있고 반복 횟수를 계산하지 않고 난수를 재생성한다고 말하고 싶습니다. 나는 당신의 질문을 이해 무엇을, 당신은 반복을 제외 2D 포인트의 배열을 생성 할에서스위프트 - 2 차원 배열에

for _ in 0..<33{ 
     let j = Int(arc4random_uniform(10)) 
     let k = Int(arc4random_uniform(10)) 
     while live.contains(//The point j,k){ 
     live.append(Array(arrayLiteral: j,k)) 
      cells[j][k] = true 
     } 
    } 

답변

2

, 당신은 CGPoint을 사용하거나 정의 할 수 있습니다 자신의 Point

struct Point: Equatable { 
    let x: Int 
    let y: Int 
} 

func == (lhs: Point, rhs: Point) -> Bool { 
    return lhs.x == rhs.x && lhs.y == rhs.y 
} 

var live: [Point] = [] 
for _ in 0..<10{ 

    var candidate = Point(x: Int(arc4random_uniform(10)), y: Int(arc4random_uniform(10))) 
    while live.contains(candidate) { 
     candidate = Point(x: Int(arc4random_uniform(10)), y: Int(arc4random_uniform(10))) 
    } 
    live.append(candidate) 
} 

또는 그렇게

같은 튜플을 사용할 수 있습니다
var live: [(Int, Int)] = [] 
for _ in 0..<10{ 
    var j = Int(arc4random_uniform(10)) 
    var k = Int(arc4random_uniform(10)) 
    while live.contains({$0 == (j, k)}) { 
     j = Int(arc4random_uniform(10)) 
     k = Int(arc4random_uniform(10)) 
    } 
    live.append((j,k)) 
} 

문제의 크기에 따라 가능한 모든 값의 배열을 만든 다음 전나무를 섞은 다음 st X 요소를 추가 할 때마다 새로운 임의의 점 집합이 필요합니다. 당신은 그것을 더 최적화 할 수 있지만, code'd는 비슷한 모양 : 당신은 더욱이 솔루션을 최적화 할 수 있지만이 데이터 세트에 대한 자세한 내용을 알고하는 데 필요한 것

var possibleValues: [Point] = [] 
for x in 0..<5 { 
    for y in 0..<5 { 
     possibleValues.append(Point(x: x, y: y)) 
    } 
} 

func randomPoints(numberOfPoints: Int) -> [Point] { 
    // shuffle original array without changing it 
    let shuffled = possibleValues.sorted { _ in arc4random_uniform(10) > 5 } 
    // take first X elements 
    return Array(shuffled[0..<numberOfPoints]) 
} 

randomPoints(numberOfPoints: 10) 

. 희망이 도움이

+0

예, 맞아요, 내 샘플 코드를 업데이 트하겠습니다 –

+1

나는 거의 동일한 코드를 작성 했으므로 upvoted! :-) – vacawama

+0

var live = Array >() –

관련 문제