Swift: Найти наименьший счет игрока в массиве игроков и вернуть игрока, только если счет уникален - PullRequest
0 голосов
/ 18 апреля 2020

У меня есть свойство Score в структуре Player. Я пытаюсь найти способ отфильтровать множество игроков, чтобы найти наименьшее количество очков. Но условие состоит в том, что он должен вернуть игрока, только если у него уникальная низкая оценка (оценка не может соответствовать другому игроку). Иначе, если два или более игрока имеют одинаковый низкий балл, возвращается массив всех игроков с самым низким баллом. Ниже приведен пример кода:

struct Player {
    var score: Int
}

let players = [Player(score: 4), Player(score: 7), Player(score: 5), Player(score: 3), Player(score: 3), Player(score: 8), Player(score: 3)]

Спасибо

Ответы [ 2 ]

0 голосов
/ 18 апреля 2020
struct Player {
    var score: Int
}

let players = [Player(score: 4), Player(score: 7), Player(score: 5), Player(score: 9), Player(score: 3), Player(score: 8), Player(score: 3)]

func playerWithLowestScore(players: [Player]) -> Player? {
    // sort
    let sortedPlayers = players.sorted() { $0.score < $1.score }

    // filter by lowest score
    let filtered = sortedPlayers.filter() { $0.score == sortedPlayers[0].score }

    return filtered.count == 1 ? filtered[0] : nil
}


let solePlayerWithLowestScore = playerWithLowestScore(players: players)

if let player = solePlayerWithLowestScore {
    print(player)
} else {
    print("No single player with a low score.")
}
0 голосов
/ 18 апреля 2020

Эта функция дает массив Player с самым низким счетом:

func getLowestScorePlayers(for players: [Player]) -> [Player] {
    let minScore = players.map { $0.score }.min()
    return players.filter { $0.score == minScore }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...