从下面的代码我创建了一个数学加法应用程序:
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]]
答案 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,然后重复。