Я думаю, вы должны сделать что-то вроде этого:
struct Game {
var cod: String
var des: Float?
}
struct OtGame {
var cod: String
var sor: Float?
}
let games = [Game(cod: "001234", des: nil),
Game(cod: "001111", des: nil),
Game(cod:"002222", des: nil),
Game(cod:"005555", des: nil)]
var otGames = [OtGame(cod: "002222", sor: nil),
OtGame(cod: "005555", sor: nil),
OtGame(cod: "001111", sor: nil)]
//Sort otGames based on indexes of games
otGames.sort { (o1, o2) -> Bool in
if let index1 = games.firstIndex(where: {$0.cod == o1.cod}), let index2 = games.firstIndex(where: {$0.cod == o2.cod}) {
return index1 < index2
}
return false
}
// Add missing games
for game in games {
if !otGames.contains(where: {$0.cod == game.cod}) {
otGames.append(OtGame(cod: game.cod, sor: game.des))
}
}
Обратите внимание, что этот вид имеет очень плохие характеристики, я предлагаю вам найти другую структуру данных или решение для предотвращения этого вычисления.