Arrays 在swift中将字符串更改为变量

Arrays 在swift中将字符串更改为变量,arrays,swift,string,Arrays,Swift,String,我有一个数组的形式 var array = ["cat1", "cat2", "cat3"] 我希望能够随机选择其中一个元素,其中每个元素都是另一个数组的实际名称 所以我也有 var cat1=[“Q1”、“Q2”、“Q3”]基本上是一系列问题 struct Topic { let questions: [String] } 这与cat2和cat3的格式类似 现在我想这样做的原因是随机选择一个问题主题,然后从所选数组中选择一个问题,我的问题是我不知道如何以编程方式使用,例如 cat2

我有一个
数组
的形式

var array = ["cat1", "cat2", "cat3"]
我希望能够随机选择其中一个元素,其中每个元素都是另一个数组的实际名称

所以我也有

var cat1=[“Q1”、“Q2”、“Q3”]
基本上是一系列问题

struct Topic {
    let questions: [String]
}
这与
cat2
cat3
的格式类似

现在我想这样做的原因是随机选择一个问题主题,然后从所选数组中选择一个问题,我的问题是我不知道如何以编程方式使用,例如

cat2[1]
我基本上希望显示所选元素的内容

这有可能吗?一段时间以来,我一直在努力让这个游戏玩得更好:(


谢谢!

为什么不使用数组数组,比如

var cat1 = ["Q1", "Q2"]
var cat2 = ["Q10", "Q11"]
var cat3 = ["Q20", "Q21"]
var array = [cat1, cat2, cat3]
并从
数组
中随机选择一个对象,该对象将是
cat1
cat2
cat3
中的一个,代表问题数组


编辑:似乎这些是您的实例变量,或者在
viweDidLoad
中初始化它们(如果它在视图控制器中),或者使用下面的代码

var array = [["Q1", "Q2"],
             ["Q10", "Q11"],
             ["Q20", "Q21"]]

类型可以使用
[[String]]
或为此创建自定义类

要使用
[[String]]
,首先声明数组
cat1
cat2
cat3

let cat1 = [...]
let cat2 = [...]
let cat3 = [...]
然后你只需这样做:

let array = [cat1, cat2, cat3] // without the ""s!
有关如何选择随机项目的信息,请参阅

基本上,您可以从
数组
中选择一个随机项,将结果放入一个名为
随机主题
的数组或其他任何数组,然后从
随机主题
中选择另一个随机项


或者,您可以创建一个类型来存储问题

struct Topic {
    let questions: [String]
}

然后您创建一个
主题的数组,即
[Topic]
,并执行相同的操作。

您可以拥有一个数组,而不是
字符串。例如:

var cat1 = ["Q1", "Q2", "Q3"]
var cat2 = ["Q1", "Q2", "Q3"]
var cat3 = ["Q1", "Q2", "Q3"]

var array = [cat1, cat2, cat3]
或二维数组:

var array = [["Q1", "Q2", "Q3"], ["Q1", "Q2", "Q3"], ["Q1", "Q2", "Q3"]]
然后您可以随机选择一条“线”,然后从中选择问题:

var question = array[randomNumber][questionNumber]
另一种选择是使用
字典
。然后您将拥有以下结构:

var dict = ["cat1" : ["Q1", "Q2", "Q3"],
            "cat2" : ["Q1", "Q2", "Q3"],
            "cat3" : ["Q1", "Q2", "Q3"]]

请在下面的代码和检查演示也

/* DECLARING ALL THE QUESTION ARRAYS */
var cat1 = ["Q1", "Q2", "Q3", "Q4", "Q5"],
    cat2 = ["Q6", "Q7"],
    cat3 = ["Q8", "Q9", "Q10", "Q11", "Q12", "Q13"],
        /* DECLARING ALL THE QUESTION ARRAYS INTO ANOTHER SINGLE ARRAY */
        array = [cat1, cat2, cat3];

/* SELECTING WHICH QUESTION ARRAY TO PICK EITHER CAT1, CAT2 OR CAT3 USING MATH RONDOM FUNCTION */
var whichQuestionArray = array[Math.floor(Math.random() * array.length)],
    /* PICKING WHICH QUESTION TO SHOW FROM ABOVE ANSWER */
    selectedQuestion = whichQuestionArray[Math.floor(Math.random() * whichQuestionArray.length)];
/* PRINTING THE OUTPUT IN THE CONSOLE */
console.log("Selected Question - " + selectedQuestion);

演示

用户是否会选择cate1 cate2等?我认为正确的方法是使用字典解决问题。@Leemakelvey您可以使用字典,其中每个键对应于[“cat1”:[“Q1”、“Q2”、“Q3”],“cat2”:[“Q1”、“Q2”、“Q3”]]@Salman,不,用户不会选择,它是随机的。所以我认为您想使动态变量正确吗?当我尝试此操作时,它告诉我“不能在属性初始化器中使用实例成员“cat1”;属性初始化器在“self”可用之前运行。”是否有一种在数组中写入数组的特定方法?我已经编辑了答案,这是viewController中的代码吗?然后您也可以创建IVAR作为可选项,并在
viewDidLoad
I triedvar数组=[[“Q1”、“Q2”、“Q3”]、[“Q1”、“Q2”、“Q3”]、[“Q1”、“Q2”、“Q3”]]中赋值,但当我尝试打印(数组[0][]时,我会得到[“Q1”、“Q2”、“Q3”]