【问题标题】:Is there a way to declare an arbitrary number of arrays in Swift?有没有办法在 Swift 中声明任意数量的数组?
【发布时间】:2021-05-24 20:54:49
【问题描述】:

我是编程和 Swift 的新手;如果我问一个明显的问题,我很抱歉。我正在尝试模拟排名选择投票算法。它的几个部分起作用,但我坚持一个基本想法:我需要生成任意数量的数组,其中包含每个选民的假想选票。我希望软件生成许多看起来或多或少像这样的数组:

var ballot1 = ["candidateB", "candidateA", "candidateD"]
var ballot2 = ["candidateC", "candidateD"]

到目前为止,我已经手写了我需要的那些,但我想自动化这个过程。有没有一种方法,在 Swift 中,我可以声明任意数量的包含变量的数组,而无需手写每个?我希望能够指定一个任意整数 - 10,比如说...或 2,500? - 让一个函数吐出那么多数组。 (我已经单独开发了一个函数来创建包含随机参数内容的随机参数长度的 one 数组,但我一直试图在许多数组中复制该函数。)

我尝试了各种 for-in 循环,但每当我尝试使用代码声明新变量时都会遇到各种错误。有没有一种简单的方法可以让软件声明具有递增名称的变量(例如,ballot1ballot2ballot3 等)?我错过了什么明显的东西吗?感谢您的建议。

【问题讨论】:

  • 对于您问题的第一部分,您似乎正在寻找多维数组——例如 (stackoverflow.com/questions/25127700/…)。然后,对于第二部分,看起来您可能在询问变量的“名称”,因为您希望您需要访问按名称创建的数组。但是,在多维数组中,您将通过索引访问它们。例如,ballot[0][1] 可以在第一张选票上为您提供第二项。
  • 或者以数组为值,键为变量名的字典
  • 感谢 jnpdx、Joakim Danielson 和 Duncan C 的有益回复!本来想用多维字符串数组来解决这个问题,但是遇到了不知道怎么解决的实现困难。我已经改变了我在问题中提出的基于变量的想法的方法,这使我能够很好地完成项目的后半部分(即投票制表和统计),但不是前半部分。考虑到您的 cmets,我回到绘图板上,使用基于整数的多维数组,并解决了我的问题。谢谢!

标签: arrays swift variable-declaration


【解决方案1】:

使用数组数组,正如 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)")

【讨论】:

  • 正如我在上面的评论中所指出的,您的建议非常有帮助。感谢您的时间和专业知识!
猜你喜欢
  • 1970-01-01
  • 2015-03-08
  • 1970-01-01
  • 1970-01-01
  • 2021-04-11
  • 1970-01-01
  • 2017-11-03
  • 2013-01-18
  • 2020-05-03
相关资源
最近更新 更多