arrays - 创建一个没有重复的结构数组
问题描述
最近开始学习 Swift,现在遇到了问题(下面的代码将插入):
我从 3 个数组创建了一个结构数组。在创建结构的实例时,我需要通过随机(我理解的 randomElement)来完成 - 所有 3 个参数都必须是唯一的。如何检查函数的唯一性?
arrayOfHumans = createRandomHuman()
struct Human {
let name: String
let surname: String
let age: String
var email: String
}
var arrayOfHumans = [Human] ()
var humans: [Human] = []
let nameA = ["Tim", "Mike", "Stan"]
let surnameA = ["Burk", "Sims", "Stoch"]
let ageA = ["12", "30", "25"]
let emailA = ["one@live.com", "two@gmail.com", "three@outlook.com"]
func createRandomHuman() -> [Human] {
for _ in 1...3 {
if nameA.isEmpty == false {
let human = Human(name: nameA.randomElement()!,
surname: surnameA.randomElement()!,
age: ageA.randomElement()!,
email: emailA.randomElement()!)
humans.append(human)
}
}
return humans
}
实际结果:
first Struct {
name: Tim
surname: Sims
age: 12
email: three@outlook.com
}
second Struct {
name: Mike
surname: Stoch
age: 25
email: one@live.com
}
third Struct {
name: Stan
surname: Burk
age: 30
email: two@gmail.com
}
解决方案
一种解决方案是分别shuffle
对 surname、age 和 email 数组进行排序,以获得随机但唯一的顺序。
let nameA = ["Tim", "Mike", "Stan"]
let surnameA = ["Burk", "Sims", "Stoch"]
let ageA = ["12", "30", "25"]
let emailA = ["one@live.com", "two@gmail.com", "three@outlook.com"]
func createRandomHuman() -> [Human] {
let shuffledSurnameA = surnameA.shuffled()
let shuffledAgeA = ageA.shuffled()
let shuffledEmailA = emailA.shuffled()
var humans: [Human] = []
for i in 0..<nameA.count {
let human = Human(name: nameA[i],
surname: shuffledSurnameA[i],
age: shuffledAgeA[i],
email: shuffledEmailA[i])
humans.append(human)
}
return humans
}
let arrayOfHumans = createRandomHuman()
另一种方法是洗牌索引
func createRandomHuman() -> [Human] {
let indices = nameA.indices
let shuffledIndices = (0..<3).map{ _ in indices.shuffled()}
var humans: [Human] = []
for i in 0..<nameA.count {
let human = Human(name: nameA[i],
surname: surnameA[shuffledIndices[0][i]],
age: ageA[shuffledIndices[1][i]],
email: emailA[shuffledIndices[2][i]])
humans.append(human)
}
return humans
}
推荐阅读
- sql - 过去 6 个月的用户数图 - Laravel
- google-cloud-platform - 从谷歌云获取访问令牌
- java - Spring boot 错误“TrainerController 中的字段存储库需要一个无法找到的 TrainerRepo 类型的 bean。” 。”
- vue.js - Vue中最好的博客管理系统框架
- php - 如何使用 eloquent 成功地将外键约束添加到 laravel 中的数据库表?
- flutter - 了解 ScopedModel 和 Flutter 中的状态
- reactjs - 将 SVG div 加载到 React 组件
- reactjs - 如何将reducer的返回值设置为react js组件中的状态对象
- amazon-web-services - 当 2 个 lambda 具有相同的运动流时,会有什么行为?
- python - 使用 Paramiko 从远程服务器执行命令到另一个远程服务器