1から5までのスケールでユーザーを評価できる機能を持つアプリをビルドします。5つ星評価システムデータベースデザイン
Sum of (weight * number of reviews at that weight)/total number of reviews
Imはfirebaseを使用してこのデータを格納する方法を考え出す問題を抱えて、私はUser
オブジェクトを初期化するために、この評価値を必要とするので、私はすでに、私はそうのような加重平均を使用するつもりだことを決定しました。私は、各レーティングを、キーがid
のレビューを残しているディクショナリとして保存することを考えました。値は実際のレーティングです。それから私は、データベースからユーザーを取得し、私は次の操作を行いUser
を初期化する必要があります後:
// keep track of amount of each rating.
var oneStars = 0
var twoStars = 0
var threeStars = 0
var fourStars = 0
var fiveStars = 0
// iterate through dictionary of ratings where key is unique Id, and value is star rating.
for (key, value) in ratings {
switch value {
case 1: oneStars += 1
case 2: twoStars += 1
case 3: threeStars += 1
case 4: fourStars += 1
case 5: fiveStars += 1
}
}
let weightedSum = (
(5 * fiveStars) +
(4 * fourStars) +
(3 * threeStars) +
(2 * twoStars) +
(1 * oneStars)
)
let reviewsSum = oneStars + twoStars + threeStars + fourStars + fiveStars
let rating = weightedSum/reviewsSum
let user = User(name: "john doe", rating: rating)
が、これは評価を格納するための最良の方法で、オブジェクトを初期化するために、実際の計算を行う、またはより効率的なデザインがありますか?ありがとう。