gpt4 book ai didi

arrays - 将恰好 2 个相等的元素添加到数组中

转载 作者:行者123 更新时间:2023-11-30 10:16:20 24 4
gpt4 key购买 nike

我正在尝试将随机数 (1...8) 添加到数组中。我想做16次。线索是,每个数字只能出现两次。到目前为止我已经成功了,但我认为这不是一个干净的方法。而我的做法是不可扩展的。如果我想要这样,比如说 24 个元素,并且全部 3 次,我就必须重写所有代码。您知道如何解决这个问题吗?提前致谢!

var Numbers: [Int] = []
var randomNumber: Int = 0
let size: Int = 16

var index1 = 0
var index2 = 0
var index3 = 0
var index4 = 0
var index5 = 0
var index6 = 0
var index7 = 0
var index8 = 0

// Methods / Functions

func createRandomNumber() {

randomNumber = Int(arc4random() % 8 + 1)
}

func checkTwins() {

switch randomNumber {
case 1:
index1++
if index1 <= 2 {
Numbers.append(randomNumber)
}
else {
addRandomNumbertoArray()
}
case 2:
index2++
if index2 <= 2{
Numbers.append(randomNumber)
}
else {
addRandomNumbertoArray()
}
case 3:
index3++
if index3 <= 2 {
Numbers.append(randomNumber)
}
else {
addRandomNumbertoArray()
}
case 4:
index4++
if index4 <= 2 {
Numbers.append(randomNumber)
}
else {
addRandomNumbertoArray()
}
case 5:
index5++
if index5 <= 2 {
Numbers.append(randomNumber)
}
else {
addRandomNumbertoArray()
}
case 6:
index6++
if index6 <= 2 {
Numbers.append(randomNumber)
}
else {
addRandomNumbertoArray()
}
case 7:
index7++
if index7 <= 2 {
Numbers.append(randomNumber)

}
else {
addRandomNumbertoArray()
}
case 8:
index8++
if index8 <= 2 {
Numbers.append(randomNumber)

}
else {
addRandomNumbertoArray()
}

default: println("Generated Number out of Index")
}
}

func addRandomNumbertoArray() {
createRandomNumber()
checkTwins()
}

func fillUpArray() {

for _ in 1...size {
addRandomNumbertoArray()
}
}

// Calls

fillUpArray()
println(Numbers)

这是在 Swift Playground 中编写的

最佳答案

你可以做的是:首先填充一个包含每个的数组数字 1、...、8 两次:

var array : [Int] = []
for i in 1 ... 8 {
array.extend(Repeat(count: 2, repeatedValue: i))
}

然后随机打乱数组:

array.shuffle()

其中 shuffle()Fisher-Yates shuffle 。可以在以下位置找到 Swift 实现: How do I shuffle an array in Swift? :

extension Array {
mutating func shuffle() {
for i in 0..<(count - 1) {
let j = Int(arc4random_uniform(UInt32(count - i))) + i
swap(&self[i], &self[j])
}
}
}

这可以毫无问题地扩展到更大的数组和更多的重复元素。

关于arrays - 将恰好 2 个相等的元素添加到数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29783579/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com