मेरे पास एक फ़ंक्शन है जो कार्यों की एक सरणी से एक यादृच्छिक फ़ंक्शन देता है।

मैं चाहता हूं कि लौटा हुआ फ़ंक्शन यादृच्छिक रूप से दो बार एक पंक्ति में वापस नहीं किया जाए जब फ़ंक्शन को फिर से बुलाया जाता है, इसलिए मैं अंतिम फ़ंक्शन को वापस करने के लिए एक खाली ऐरे का उपयोग करता हूं और फिर जब भी फ़ंक्शन को कॉल किया जाता है तो मूल ऐरे पर फ़िल्टर का उपयोग करें लौटाए गए अंतिम फ़ंक्शन को बाहर करें।

किसी कारण से फ़ंक्शन एक यादृच्छिक के बजाय ऐरे में सभी कार्यों को वापस कर रहा है।

इसके अलावा जब मैंने यह देखने के लिए जाँच की कि क्या फ़िल्टर किए गए ऐरे में फ़ंक्शन हैं जो इसे 0 प्रिंट करते हैं। तो मैं बहुत उलझन में हूँ।

var arrayOfFunctions: [()] = Array<()>()
var lastFunction: [()] = Array<()>()

func myFunction() -> () {
    if !lastFunction.isEmpty {
        let filteredArray: [()] = arrayOfFunctions.filter( { return ($0 != lastFunction)})
        guard let nextFunction = filteredArray.randomElement() else {return arrayOfFunctions[0]}
        lastFunction.removeAll()
        lastFunction.append(nextFunction)
        return nextFunction
    }
    else {
        arrayOfFunctions.append(function1())
        arrayOfFunctions.append(function2())
        guard let nextFunction = arrayOfFunctions.randomElement() else {return arrayOfFunctions[0]}
        lastFunction.append(nextFunction)
        return nextFunction
    }
}
-1
stepjesse 10 सितंबर 2020, 05:36

1 उत्तर

सबसे बढ़िया उत्तर

आप lastFunction प्रकार के Array<()>() का उपयोग कर रहे हैं और फिर नीचे दिए गए कोड में एक एकल फ़ंक्शन () तत्व के साथ इसकी तुलना कर रहे हैं,

let filteredArray: [()] = arrayOfFunctions.filter( { return ($0 != lastFunction)})

इसके बजाय आपको ()? को lastFunction प्रकार के रूप में उपयोग करना चाहिए और फिर प्रासंगिक तुलना करना चाहिए, अर्थात।

func myFunction() -> () {
    var arr = Array<()>()
    if let value = lastFunction {
        arr = arr.filter { $0 != value }
    } else {
        arrayOfFunctions.append(function1())
        arrayOfFunctions.append(function2())
        arr = arrayOfFunctions
    }
    guard let nextFunction = arr.randomElement() else { return arr[0] }
    lastFunction = nextFunction
    return nextFunction
}
0
PGDev 10 सितंबर 2020, 07:43