Swift ios选择随机的一对问题

时间:2018-05-12 06:13:31

标签: ios swift

从下面的代码我创建了一个数学加法应用程序:

lbNum1.text = String(randomItem) +lbNum1.text = String(randomItem)

从下面的代码我使用2组数组并从两者中提取随机值。如果我只使用一组固定的问题,我想知道的是什么?

例如,如果setquestions被称为1 + 2,3 + 2,2 + 8,9 + 7,3 + 6并且没有任何一对会重复,那么这组唯一的问题就会消失如果所有对都已圆,则重复。还有如何将这组问题存储到我可以分配给lbNum1和lbNum2的数组中?

func setRandom() {
    let devices = [1, 2, 8, 7, 6]
    let randomIndex = Int(arc4random_uniform(UInt32(devices.count)))
    let randomItem = devices[randomIndex]

    let devices1 = [2, 3, 2, 9, 3]
    let randomIndex1 = Int(arc4random_uniform(UInt32(devices1.count)))
    let randomItem1 = devices[randomIndex1]

    var a = 100
    lbNum1.text = String(randomItem)
    lbNum2.text = String(randomItem1)
    setResult(randomA: randomItem, randomB: randomItem1)
}

获取数据的代码,我想知道的是我如何解析desc中的问题并将a和b值分配给device = [(a,b)作为示例,(2,3), (8,2),(7,9),(6,3)]这个值应该来自问题a和b的api,这样当api的问题发生变化时,问题的集合就是设备也将改变。任何想法?

Alamofire.request("test", method: .get, parameters: nil, encoding: JSONEncoding.default, headers: nil).responseJSON { (response:DataResponse<Any>) in

            switch(response.result) {
 case .success(_):
                guard let json = response.result.value as! [[String:Any]]? else{ return}
                print(" The Response \(json)")
                for item in json {

//这部分是我想问的一个新问题 响应数据

The Response [["sched": 2018-04-19T15:54:24+08:00, "name": Homework, "reward": 100.00, "child": bryan, "reward_desc": , "type": homework, "status": {
    name = ongoing;
}, "desc": {
  "questions" : [
    {
      "b" : 2,
      "a" : 1
    },
    {
      "b" : 3,
      "a" : 2
    },
    {
      "b" : 2,
      "a" : 8
    },
    {
      "b" : 9,
      "a" : 7
    },
    {
      "b" : 3,
      "a" : 6
    }
  ],
  "operation" : "+"
}, "date_created": 2018-04-30T09:46:44.963028+08:00, "id": 268, "parent": bryan, "occurrence": {
    name = once;
}, "date_modified": 2018-05-12T15:10:09.000152+08:00]]

2 个答案:

答案 0 :(得分:0)

如果你想要一组固定的问题,你可以简单地使用一个元组数组而不是两个不同的数组,即

let device = [(1, 2), (2, 3), (8, 2), (7, 9), (6, 3)]
let randomIndex = Int(arc4random_uniform(UInt32(device.count)))
let randomItem = device[randomIndex]

lbNum1.text = String(randomItem.0)
lbNum2.text = String(randomItem.1)
setResult(randomA: randomItem.0, randomB: randomItem.1)

在这里,您将有一组固定的问题,您可以随机选择。

修改

var device = [(Int, Int)]()
func setRandom()
{
    if device.count == 0
    {
        device = [(1, 2), (2, 3), (8, 2), (7, 9), (6, 3)]
    }
    let randomIndex = Int(arc4random_uniform(UInt32(device.count)))
    let randomItem = device[randomIndex]
    device.remove(at: randomIndex)
    print(randomItem)
}

编辑:2

class Device
{
    var first: Int?
    var second: Int?
    var isUsed = false
    init(_ first: Int?, _ second: Int?)
    {
        self.first = first
        self.second = second
    }
}
class ViewController: UIViewController
{
    var device = [Device(1, 2), Device(2, 3), Device(8, 2), Device(7, 9), Device(6, 3)]
    func setRandom()
    {
        var filteredDevice = device.filter { $0.isUsed == false }
        if filteredDevice.isEmpty
        {
            for d in device
            {
                d.isUsed = false
            }
            filteredDevice = device
        }
        let randomIndex = Int(arc4random_uniform(UInt32(filteredDevice.count)))
        let randomItem = filteredDevice[randomIndex]
        filteredDevice[randomIndex].isUsed = true
        print(randomItem.first, randomItem.second)
    }
}

编辑3:

func getrec()
{
    Alamofire.request("test", method: .get, parameters: nil, encoding: JSONEncoding.default, headers: nil).responseJSON { (response:DataResponse<Any>) in
        switch(response.result)
        {
        case .success(_):
            guard let json = response.result.value as! [[String:Any]]? else{
                return
            }
            if let arr = json as? [[String:Any]], let dict = arr.first, let questions = (dict["desc"] as? [String:Any])?["questions"] as? [[String:Int]]
            {
                for question in questions
                {
                    self.device.append(Device(question["a"] as? Int , question["b"] as? Int))
                }
                print(device)
            }

        default:
            break
        }
    }
}

让我知道。你仍然面临任何问题。

答案 1 :(得分:0)

简单元组将解决固定的问题组合。根据你的要求,没有任何一对会重复,只有当所有对都是圆的时才会重复。我们必须为每对维持numberOfTimesUsed。让我们有一组三个问题,如果问题2是随机的,直到问题1和问题3使用问题2不应该来。如果您不清楚或者我错过了任何案例,请参考以下代码并知道。

    import Foundation

    extension Array {
        func random() -> Element {
            let randomIndex = Int(arc4random_uniform(UInt32(self.count)))
            return self[randomIndex]
        }
    }

    class Question {
        let firstValue: Int
        let secondValue: Int
        var numberOfTimesUsed: Int = 0

        init(firstValue: Int, secondValue: Int) {
            self.firstValue = firstValue
            self.secondValue = secondValue
        }
    }

    var questions = [Question(firstValue: 1, secondValue: 2), Question(firstValue: 3, secondValue: 2), Question(firstValue: 2, secondValue: 8)]

    for x in 1...10 {
        let mininumTimesUsedForAnyQuestion = questions.sorted(by: {$0.numberOfTimesUsed < $1.numberOfTimesUsed}).first!.numberOfTimesUsed

        let question = questions.filter({ question in question.numberOfTimesUsed == mininumTimesUsedForAnyQuestion}).random()
        question.numberOfTimesUsed += 1
        print(question.firstValue, question.secondValue, question.numberOfTimesUsed)
    }

注意: For循环将按某种顺序打印前3,然后重复。