我是一個完整的新手,正在嘗試通過構建一些基本程式來補充在線課程學習。我目前正在嘗試構建一個程式來計算一個人的高爾夫指數。為了做到這一點,我必須首先計算高爾夫球手最后 20 輪的最低 8 輪的平均值。計算最后 20 輪的平均值很容易。它將我無法弄清楚的最后 20 輪中最低的 8 輪隔離開來。
概括地說,如何計算陣列中最低 N 個值的總和?
給高爾夫球手的注意事項:出于本練習的目的,我想象個人只在一個球場上打球,標準桿為 72 桿。我意識到,如果標準桿發生變化,該程式將無法按當前構建的那樣作業。
var scores: Array = [98, 99, 87, 86, 88, 92, 88, 87, 84, 98, 85, 84, 80, 99, 100, 101, 94, 96, 79, 99, 92, 94, 87, 99, 80]
var lastTwentyScores = scores.suffix(20)
var total = lastTwentyScores.reduce(0, )
var avg = Double(total) / Double(lastTwentyScores.count)
var index = avg - 72
現在,它給了我過去 20 到 72 的平均值。
我知道我需要創建一個新變數,并將最終除數更改為 8,而不是 20。我只是不知道如何呼叫陣列中的 8 個最小值。
uj5u.com熱心網友回復:
您只需要對最后 20 個進行排序并獲取該排序結果的前 8 個。這將為您提供最后 20 個中最低的 8 個。
var scores: Array = [98, 99, 87, 86, 88, 92, 88, 87, 84, 98, 85, 84, 80, 99, 100, 101, 94, 96, 79, 99, 92, 94, 87, 99, 80]
var lastTwentyScores = scores.suffix(20)
var lowestEightScores = lastTwentyScores.sorted().prefix(8)
var total = lowestEightScores.reduce(0, )
var avg = Double(total) / Double(lowestEightScores.count)
這給出了總共 666 和平均 63.25。
您可以將大部分代碼簡化為:
var total = scores.suffix(20).sorted().prefix(8).reduce(0, )
這使它變得漂亮和整潔,但是具有中間步驟可以使其更易于閱讀,當然也更易于除錯。
uj5u.com熱心網友回復:
就像@HangarRash 所說,如果你先對分數進行排序,這樣做會容易得多。只需按升序對陣列進行排序,然后獲取前 8 個元素。
var scores: Array = [98, 99, 87, 86, 88, 92, 88, 87, 84, 98, 85, 84, 80, 99, 100, 101, 94, 96, 79, 99, 92, 94, 87, 99, 80]
scores = scores.sorted() //Sorts the scores (from least to greatest)
var eightLowestScores: Array = scores[...8] // Gets the first 8 elements based on their index.
uj5u.com熱心網友回復:
我想你正在尋找這個:
scores
.suffix(20) // last 20
.sorted() // sort to get the ordered slice
.prefix(8) // 8 lowest
.reduce(0, ) / 8 // average
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/531186.html
標籤:数组迅速句法和整数
