Я пытаюсь перемешать массив чисел, а затем сохранить полученный случайный массив в переменной.Но я хочу, чтобы в результирующем случайном массиве были элементы, сумма которых всегда равна 1.
var numbers = [1,0.5,0.25,0.125,0.0625]
var newTime = [Double]()
var x = numbers.shuffled()
for _ in 0..<x.count {
newTime.append(x.random_element())
}
var sum = newTime.reduce(0, +)
for _ in 0..<newTime.count {
if sum == 1 {
print("Final Sum: \(newTime)")
}
if sum > 1 {
let rand = Int(arc4random_uniform(UInt32(newTime.count)))
newTime.remove(at: rand)
} else if sum < 1 {
newTime.append(x.random_element())
}
}
РЕДАКТИРОВАНИЕ: (по совету Дункана)
var numbers = [1,0.5,0.25,0.125,0.0625]
var newTime = [Double]()
var x = numbers.shuffled()
for _ in 0..<x.count {
newTime.append(x.random_element())
}
var sum = newTime.reduce(0, +)
newTime.append(1.0 - sum)
print(newTime)
Это работает до тех пор, пока (1.0-сумма) является положительным числом.В этом случае к массиву добавляется положительное число, в результате чего сумма всех элементов в массиве = 1,0.Однако, если (1.0-сумма) является отрицательным числом, тогда оно не работает для меня, потому что результирующий массив newTime будет иметь все предыдущие элементы в этом массиве плюс еще одно отрицательное число, которое в основном суммирует до 1,0.В этом случае результирующий newTime = [0,125, 0,25, 0,0625, 1,0, 1,0, -1,4375].В то время как я ожидаю newTime = [1.0], так как сумма остальных элементов равна 1.4375, поэтому мне нужно, чтобы они были удалены из массива newTime.
Надеюсь, я смогу объяснить вещи ясно.