выбрать случайное изображение из двух разных массивов

Мне нужно отправить изображение в UIImageView случайным образом из двух разных массивов. Я не уверен, как мне поступить с этим?

var imgSetOne: [String] = ["car1.png", "car2.png", "car3.png", "car4.png", "car5.png"]
let imgOneRandom = Int(arc4random_uniform(5))

var imgSetTwo: [String] = ["bus1.png", "bus2.png", "bus3.png", "bus4.png", "bus5.png"]
let imgTwoRandom = Int(arc4random_uniform(5))

UIImage(named: imgSetOne[imgOneRandom]) OR UIImage(named: imgSetTwo[imgTwoRandom])

Я пытаюсь выбрать случайное изображение из первого массива и второго массива, используя arc4random_uniform. Теперь я хочу отобразить изображение либо из первого результата массива, либо из второго результата массива в UIImageView.


person MK4    schedule 23.08.2016    source источник


Ответы (3)


Если ваши массивы имеют одинаковый размер, вы можете просто выбрать массив для случайного выбора изображения:

let arrayIndex = Int(arc4random_uniform(2))
UIImage(named: arrayIndex == 0 ? imgSetOne[imgOneRandom] : imgSetTwo[imgTwoRandom])

Обратите внимание, что если массивы имеют разный размер, и вы все еще хотите выбрать каждое изображение из обоих массивов с одинаковой вероятностью, вам нужно будет немного изменить эту логику (оставлю ее в качестве домашнего задания)

person Vladimir    schedule 23.08.2016
comment
Спасибо! Это работало и для разных размеров массива. Чтобы получить ту же вероятность, я полагаю, мы должны использовать только одно случайное целое число, в отличие от того, что я использовал в этом случае. - person MK4; 23.08.2016

На основе @Vladimir answer вы можете создать для этого оператор:

func ||(left: String, right: String) -> String {
    let isRight = Int(arc4random_uniform(2))
    return isRight == 1 ? right : left
}

И используйте так:

UIImage(named: "left" || "right")
person pacification    schedule 23.08.2016
comment
Нет. Не делай этого. - person Alexander; 23.08.2016

ответ Владимира делает именно то, что вам нужно. Если вам нужно выбрать более 2, вы можете сделать это:

let imgSetOne = ["car1.png", "car2.png", "car3.png", "car4.png", "car5.png"]
let imgOneRandom = imgSetOne[Int(arc4random_uniform(UInt(imgSetOne.count)))]

let imgSetTwo = ["bus1.png", "bus2.png", "bus3.png", "bus4.png", "bus5.png"]
let imgTwoRandom = imgSetTwo[Int(arc4random_uniform(UInt(imgSetTwo.count)))]

let candidates = [imgOneRandom, imgTwoRandom]
let finalPick = candidates[Int(arc4random_uniform(UInt(candidates.count)))]
UIImage(named: finalPick)
person Alexander    schedule 23.08.2016
comment
arc4random_uniform принимает только беззнаковые целые числа. Поэтому я использовал 'let imgOneRandom = imgSetOne[Int(arc4random_uniform(UInt(imgSetOne.count)))]' Спасибо!! - person MK4; 23.08.2016