一個帶有權重的隨機選擇器
隨便寫了一個帶有權重的隨機選擇器,test已經跑過了,但是還沒上線測試。
可以用來從幾個帶有權重的選項中選擇一個。
場景類似用來取nginx的upstream、 用來抽獎或者用來作弊。
package main
import (
"log"
"github.com/go-ego/murmur"
"github.com/qiuker521/weightedrand"
)
func main() {
log.Println("隨機選一個語言")
選語言()
log.Println("使用一致性hash作弊")
一致性雜湊()
}
func 選語言() {
c := weightedrand.Chooser{}
var choices = []weightedrand.Choice{}
choices = append(choices, weightedrand.Choice{"java", 0})
choices = append(choices, weightedrand.Choice{"rust", 0})
choices = append(choices, weightedrand.Choice{"python", 1})
choices = append(choices, weightedrand.Choice{"go", 9})
c.NewChooser(choices...)
for i, v := range choices {
log.Println("選項", i+1, ":", v.Item)
}
log.Println("我應該學", c.Pick(), "語言")
}
func 一致性雜湊() {
c := weightedrand.Chooser{}
var choices = []weightedrand.Choice{}
choices = append(choices, weightedrand.Choice{"java", 1})
choices = append(choices, weightedrand.Choice{"rust", 1})
choices = append(choices, weightedrand.Choice{"python", 1})
choices = append(choices, weightedrand.Choice{"go", 1})
for i, v := range choices {
log.Println("選項", i+1, ":", v.Item, "權重:", v.Weight)
}
c.NewChooser(choices...)
var hash = "一致性雜湊永遠會選java"
log.Println("然而事實上是:雖然不作弊,但是", hash)
log.Println("不信的話我選擇給你看:", c.PickByHash(float64(murmur.Sum32(hash))))
}
執行結果:
2019/04/23 00:57:51 隨機選一個語言
2019/04/23 00:57:51 選項 1 : java
2019/04/23 00:57:51 選項 2 : rust
2019/04/23 00:57:51 選項 3 : python
2019/04/23 00:57:51 選項 4 : go
2019/04/23 00:57:51 我應該學 go 語言
2019/04/23 00:57:51 使用一致性hash作弊
2019/04/23 00:57:51 選項 1 : java 權重: 1
2019/04/23 00:57:51 選項 2 : rust 權重: 1
2019/04/23 00:57:51 選項 3 : python 權重: 1
2019/04/23 00:57:51 選項 4 : go 權重: 1
2019/04/23 00:57:51 然而事實上是:雖然不作弊,但是 一致性雜湊永遠會選java
2019/04/23 00:57:51 不信的話我選擇給你看: java
相關文章
- css選擇器權重和超越`!important`CSSImport
- css 選擇器及權重筆記CSS筆記
- 12.8學習日報(背景簡寫、選擇器繼承性、選擇器的權重)繼承
- sample, choices: 從list中隨機選擇無重複的元素隨機
- CSS 選擇器權值CSS
- python如何隨機選擇幾個字串並輸出Python隨機字串
- CSS 基礎(盒模型、選擇器、權重、優先順序)CSS模型
- css選擇器,帶例項CSS
- CSS 選擇器 - 帶例項CSS
- 機器學習中,有哪些特徵選擇的工程方法?機器學習特徵
- php生成一個可選位數的隨機碼PHP隨機
- css 選擇器效能的取捨。和大量標籤帶有都是classCSS
- 重學前端筆記22-css 選擇器機制前端筆記CSS
- 學機器學習要選擇 Python 的13個原因機器學習Python
- vue 手寫一個時間選擇器Vue
- CSS選擇器(一)CSS
- 002---選擇器(標籤選擇器、類選擇器、id選擇器、偽類選擇器、萬用字元選擇器)字元
- jQuery選擇器介紹:基本選擇器、層次選擇器、過濾選擇器、表單選擇器jQuery
- 相鄰兄弟選擇器、後代選擇器和子選擇器三者有什麼區別?
- 一個開源、美觀的日期選擇器(bootstrap datepicker)boot
- 直播帶貨原始碼,日期時間選擇器 選擇範圍限制原始碼
- 如何快速實現一個顏色選擇器
- 自定義一個仿拼多多地址選擇器
- ant design的Select下拉選擇器 帶搜尋功能
- jQuery雙色器隨機選號jQuery隨機
- 機器學習處理問題如何選擇一個合適的演算法?機器學習演算法
- 【antdesign select】下拉選擇-帶選擇序號
- 怎麼樣選擇一個合適的虛擬主機
- 一個帶有Redux狀態管理的本機元件(計數器)的Github專案Redux元件Github
- 「複製帶隨機指標的連結串列」的一個很巧妙解法隨機指標
- 如何利用Python隨機從list中挑選一個元素Python隨機
- 為什麼不通過修改介面或者選擇書寫繼承介面重寫方法的新子類,偏偏選擇新增上一個裝飾器繼承
- 機器學習之模型選擇機器學習模型
- 重學前端筆記21-css選擇器前端筆記CSS
- CSS3新增選擇器(屬性選擇器、結構偽類選擇器、偽元素選擇器)CSSS3
- 帶你瞭解該如何選擇BlueHost主機機房?
- Jquery的選擇器jQuery
- jQuery選擇器之層次選擇器jQuery