У меня есть массив цветов, который заполнит круговую диаграмму, чтобы действовать как игровой счетчик. Я не хочу, чтобы одни и те же цвета появлялись рядом друг с другом, делая один огромный кусок в круге.
Мой массив выглядит примерно так:
var colors = ["blue", "red", "green", "red", "blue", "blue", "blue", "green"]
Проблема состоит, конечно, в том, что есть три блюза. Есть ли что-либо, встроенное в Свифт, что позволит мне одинаково (или как можно ближе к нему) распространять значения в общем распределении и избегать их смежности?
Я могу проверить соответствие со следующим кодом, но переупорядочить их оказалось немного сложнее.
var lastColor = "white"
for color in colors {
if color == lastColor {
print("match")
}
lastColor = color
}
UPDATE:
Чтобы создать массив colors
, я начинаю с количества пробелов для каждого цвета. Это выглядит примерно так:
let numberOfReds = 2
let numberOfGreens = 2
let numberOfBlues = 4
let spaces = numberOfReds + numberOfGreens + numberOfBlues
for _ in 0..< spaces {
if numberOfReds > 0 {
numberOfReds -= 1
colors.append("red")
}
if numberOfGreens > 0 {
numberOfGreens -= 1
colors.append("green")
}
if numberOfBlues > 0 {
numberOfBlues -= 1
colors.append("blue")
}
}
Который заканчивается выплевыванием:
colors = ["red", "green", "blue", "red", "green", "blue", "blue", "blue" ]