Не повторять слово в Swift при нажатии кнопки - IOS - PullRequest
0 голосов
/ 06 марта 2020

Как я не могу повторить массив, когда я нажимаю на кнопку в swift? Я пытаюсь приносить фрукты без их повторения.

import UIKit

class fruitrandomViewController: UIViewController {
@IBOutlet weak var nextfruitButton: UIButton!
@IBOutlet weak var fruitbox: UILabel!

@IBAction func fruitbutton(_ sender: UIButton) {

    let array = ["Apple","Banana","Orange","Pinapple", "Plum", "Pear",]


    let randomFruitgenerator = Int(arc4random_uniform(UInt32(array.count)))
    fruitbox.text = array[randomFruitgenerator]

    }
}

Ответы [ 4 ]

1 голос
/ 06 марта 2020

Я предлагаю использовать Set и удалить случайный предмет из набора

var set = Set(["Apple","Banana","Orange","Pinapple", "Plum", "Pear"])

@IBAction func fruitbutton(_ sender: UIButton) {
    if let fruit = set.randomElement() {
        fruitbox.text = fruit
        set.remove(fruit)
    } else {
        fruitbox.text = "" // or whatever to indicate that the set is empty
    }
}
0 голосов
/ 06 марта 2020

Мое предложение:

Вы можете случайным образом каждый элемент 1 раз

let originFruits = ["Apple","Banana","Orange","Pinapple", "Plum", "Pear"]
let array = originFruits

@IBAction func fruitbutton(_ sender: UIButton) {
...
 let fruitRandom = array random
 array delete fruitRandom 
  if (array empty) {
    array = originFruits
  }
}

Вы можете проверить и удалить в следующий раз

let originFruits = ["Apple","Banana","Orange","Pinapple", "Plum", "Pear"]
let array = originFruits
let skipFruit = ""

@IBAction func fruitbutton(_ sender: UIButton) {
...
 array = originFruits
 array delete skipFruit
 let fruitRandom = array random
 skipFruit = fruitRandom
}
0 голосов
/ 06 марта 2020

Я думаю, что это будет работать, но я думаю, что Time Complexity может быть O(n), так как я предполагаю, что есть вероятность randomElement возврата Apple каждый раз, а savedFruit также Apple, поэтому в этом случае Time Complexity будет O(n). Лучшим обходным решением будет удалить этот элемент из этого array, поэтому в следующий раз randomElement наверняка будет другим. Затем, когда он станет другим, вы можете добавить старый и удалить текущий. Я надеюсь, что это имеет смысл для вас, но сейчас это будет работать, я думаю:

let array = ["Apple","Banana","Orange","Pinapple", "Plum", "Pear"]
var savedFruit = String()

func fetchRandomFruit()  {

if let fruit = array.randomElement() {

    if fruit != savedFruit  { //Here it will check if the last element is same as the new randomElement
        savedFruit = fruit
        fruitbox.text = savedFruit
     } else {
       fetchRandomFruit()
    }  
  }
}


@IBAction func fruitbutton(_ sender: UIButton) {

  fetchRandomFruit()
}
0 голосов
/ 06 марта 2020

Используйте fruitbox.text = array.randomElement() ?? "default value for if array is empty". Это не гарантировано не повторяется, но является случайным.

Если вы хотите, чтобы оно не повторялось, используйте это

var new = array.randomElement() ?? fruitbox.text
while new == fruitbox.text {
    new = array.randomElement() ?? fruitbox.text
}
fruitbox.text = new

Это БУДЕТ l oop бесконечно (до сбоя), если массив пуст.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...