for _, d := range drawables { total += d.GetRatio() } // 3.合計値の範囲で乱数を生成する random := rand.Intn(total) // 4.乱数をもとに抽選結果を決定する var temp int for _, d := range drawables { temp += d.GetRatio() if temp > random { return d } } return nil } draw関数に抽選ロジック2〜4実装 2.提供割合の合計値を計算する 3.合計値の範囲で乱数を生成する 4.乱数をもとに抽選結果を決定する
for _, d := range drawables { total += d.GetRatio() } // 3.合計値の範囲で乱数を生成する random := rand.Intn(total) // 4.乱数をもとに抽選結果を決定する var temp int for _, d := range drawables { temp += d.GetRatio() if temp > random { return d } } return nil } []Drawableを受け取る
for _, d := range drawables { total += d.GetRatio() } // 3.合計値の範囲で乱数を生成する random := rand.Intn(total) // 4.乱数をもとに抽選結果を決定する var temp int for _, d := range drawables { temp += d.GetRatio() if temp > random { return d } } return nil } 提供割合を取得し抽選
for _, d := range drawables { total += d.GetRatio() } // 3.合計値の範囲で乱数を生成する random := rand.Intn(total) // 4.乱数をもとに抽選結果を決定する var temp int for _, d := range drawables { temp += d.GetRatio() if temp > random { return d } } return nil } 抽選結果をDrawableで返却
int for _, d := range drawables { total += d.GetRatio() } // 3.合計値の範囲で乱数を生成する random := rand.Intn(total) // 4.乱数をもとに抽選結果を決定する var temp int for _, d := range drawables { temp += d.GetRatio() if temp > random { return d } } // return nilだとコンパイルエラーになる var ret T return ret } Drawable型の型パラメータTを定義 引数、戻り値もTに変更