2016-05-21 3 views
2

Итак, для моего первого проекта я работал над созданием приложения для оценки очков в гольф. У меня есть один массив для каждого из игроков с 18 лунками и отдельный массив в другом классе для курса. Я могу получить общий балл, вычитаемый из общей суммы, чтобы получить конечный результат оценки 90 (+18). Однако, если все отверстия имеют парный набор, но игрок выполнил только 9 отверстий, оценка будет выглядеть как 45 (-27). Игроки баллы 0 по умолчанию, так что я думал о попытке сделатьКак получить значения двух отдельных массивов Int в паре с индексом, а затем выполнить условную операцию на определенных парах?

zip(playerScoreArray, courseParArray).enumerate().filter() 

, где я бы отфильтровать playerScore дыры, что! = 0, добавить их вместе, возьмите пар для каждого из этих отверстий и добавить их вместе , и вычесть итоговый заполненный игрокHoleScores из курсаParNubers. Это дало бы мне точную + или - пар только на дырах, которые они до сих пор доработали.

Я использовал Array.reduce (0, comb +), но кроме этого, я все еще изучаю более сложные способы управления коллекциями и закрытиями.

Пример того, что я пытаюсь выполнить:

let playerScoreArray = [7, 5, 6, 4, 0, 0, 0, 0, 0] 
let holeParArray =  [4, 3, 5, 5, 4, 3, 4, 4, 4] 
// get result 7-4, 5-3, 6-5, 4-5 = +5 
// currentResult = 22-36 = -14 

Благодаря

ответ

1

Вы можете либо сделать этот тест внутри уменьшить и добавить только те, где результативный игрок был отличен от нуля:

let total = zip(playerScoreArray, holeParArray).reduce(0) { (sum, pair) in 
    return pair.0 == 0 ? sum : sum + pair.0 - pair.1 
} 

Или фильтровать эти пары перед вызовом уменьшить:

let total = zip(playerScoreArray, holeParArray).filter({ $0.0 > 0 }).reduce(0) { (sum, pair) in 
    return sum + pair.0 - pair.1 
} 
+0

Я использовал верхнюю часть, и она отлично работала, спасибо – JustinM

 Смежные вопросы

  • Нет связанных вопросов^_^