有没有办法在 Swift 中声明任意数量的数组?
Is there a way to declare an arbitrary number of arrays in Swift?
我是编程新手 Swift;如果我问一个明显的问题,我深表歉意。我正在尝试模拟排名选择投票算法。它的几个部分都有效,但我坚持一个基本想法:我需要生成任意数量的数组,其中包含每个选民的假想选票。我希望软件生成许多看起来或多或少像这样的数组:
var ballot1 = ["candidateB", "candidateA", "candidateD"]
var ballot2 = ["candidateC", "candidateD"]
到目前为止,我已经手写了我需要的那些,但我想自动化这个过程。有没有一种方法,在 Swift 中,我可以声明任意数量的那些包含变量的数组,而无需手写每个数组?我希望能够指定一个任意整数——10,比方说……或者 2,500? - 让一个函数吐出那么多数组。 (我已经单独开发了一个函数来创建包含随机参数内容的随机参数长度的 one 数组,但我一直试图在许多数组中复制该函数.)
我已经尝试过各种 for-in 循环,但每当我尝试使用代码声明新变量时,我 运行 都会遇到各种错误。有没有一种简单的方法可以让软件声明名称递增的变量(例如,ballot1
、ballot2
、ballot3
等)?我错过了一些明显的东西吗?感谢您的任何建议。
使用数组的数组,正如 jnpdx 在他们的评论中所说。
let ballot1 = ["candidateB", "candidateA", "candidateD"]
let ballot2 = ["candidateC", "candidateD"]
let ballots = [ballot1, ballot2]
或者只是
let ballots = [["candidateB", "candidateA", "candidateD"],
["candidateC", "candidateD"]]
然后您可以使用索引来参考您的选票:
ballots[0]
将为您提供第一轮投票的候选人数组,或者您可以循环遍历外部数组:
for (index, ballot) in ballots.enumerated() {
print("Ballot \(index+1) has candidates \(ballot[index])")
}
请注意,您可能希望将每个选票都设为一个结构,其中包含标题字段、候选人数组以及您可能需要的任何其他信息。然后你可以有一个选票结构数组:
struct Ballot {
let title: String
let description: String? // Optional field
let candidates: [String]
}
然后:
let ballots = [Ballot(title: "5th congressional district",
description: nil,
candidates: ["Joe", "Briana", "Jamal", "Ivan"]),
Ballot(title: "Mayor",
description: nil,
candidates: ["Adrienne", "Moisha", "Dave", "Demtri"])
]
并且:
for aBallot in ballots {
print("Ballot titled \(aBallot.title) has candidates \(aBallot.candidates)")
我是编程新手 Swift;如果我问一个明显的问题,我深表歉意。我正在尝试模拟排名选择投票算法。它的几个部分都有效,但我坚持一个基本想法:我需要生成任意数量的数组,其中包含每个选民的假想选票。我希望软件生成许多看起来或多或少像这样的数组:
var ballot1 = ["candidateB", "candidateA", "candidateD"]
var ballot2 = ["candidateC", "candidateD"]
到目前为止,我已经手写了我需要的那些,但我想自动化这个过程。有没有一种方法,在 Swift 中,我可以声明任意数量的那些包含变量的数组,而无需手写每个数组?我希望能够指定一个任意整数——10,比方说……或者 2,500? - 让一个函数吐出那么多数组。 (我已经单独开发了一个函数来创建包含随机参数内容的随机参数长度的 one 数组,但我一直试图在许多数组中复制该函数.)
我已经尝试过各种 for-in 循环,但每当我尝试使用代码声明新变量时,我 运行 都会遇到各种错误。有没有一种简单的方法可以让软件声明名称递增的变量(例如,ballot1
、ballot2
、ballot3
等)?我错过了一些明显的东西吗?感谢您的任何建议。
使用数组的数组,正如 jnpdx 在他们的评论中所说。
let ballot1 = ["candidateB", "candidateA", "candidateD"]
let ballot2 = ["candidateC", "candidateD"]
let ballots = [ballot1, ballot2]
或者只是
let ballots = [["candidateB", "candidateA", "candidateD"],
["candidateC", "candidateD"]]
然后您可以使用索引来参考您的选票:
ballots[0]
将为您提供第一轮投票的候选人数组,或者您可以循环遍历外部数组:
for (index, ballot) in ballots.enumerated() {
print("Ballot \(index+1) has candidates \(ballot[index])")
}
请注意,您可能希望将每个选票都设为一个结构,其中包含标题字段、候选人数组以及您可能需要的任何其他信息。然后你可以有一个选票结构数组:
struct Ballot {
let title: String
let description: String? // Optional field
let candidates: [String]
}
然后:
let ballots = [Ballot(title: "5th congressional district",
description: nil,
candidates: ["Joe", "Briana", "Jamal", "Ivan"]),
Ballot(title: "Mayor",
description: nil,
candidates: ["Adrienne", "Moisha", "Dave", "Demtri"])
]
并且:
for aBallot in ballots {
print("Ballot titled \(aBallot.title) has candidates \(aBallot.candidates)")