当前位置:网站首页>Go grouping & sorting
Go grouping & sorting
2022-06-23 05:24:00 【Zen and the art of computer programming】
func (r *MultiMarketOverviewService) GetMultiMarketSummaryPriceBandDistributionDataTable(ctx context.Context, req insight.MultiMarketSummaryPriceBandDistributionDataTableReq) response.Response {
rpcReq := &multi_market_overview.MultiMarketSummaryPriceBandDistributionDataTableReq{}
copier.Copy(rpcReq, &req)
rpcResp, err := caller.CompassInsightClient.GetMultiMarketSummaryPriceBandDistributionDataTable(ctx, rpcReq)
if err != nil {
return response.JSONSt(define.StRPCErr)
}
data := rpcResp.Data
// according to Dimention grouping , Sort by price band
sortDataTable(&data)
return response.JSONData(data)
}
func sortDataTable(data **multi_market_overview.MultiMarketSummaryPriceBandDistributionDatatableData) {
var list []*multi_market_overview.MultiMarketSummaryPriceBandDistributionDataTable = (*data).Datatable
// grouping
var groups = make(map[string][]*multi_market_overview.MultiMarketSummaryPriceBandDistributionDataTable)
for _, item := range list {
groups[item.Dimention] = append(groups[item.Dimention], item)
}
// In group sorting
for _, dataTables := range groups {
// Sort from small to large ( Stable sequencing )
sort.SliceStable(dataTables, func(i, j int) bool {
if GetPriceValue(dataTables[i].PriceBrand) < GetPriceValue(dataTables[j].PriceBrand) {
return true
}
return false
})
}
res := make([]*multi_market_overview.MultiMarketSummaryPriceBandDistributionDataTable, 0)
for _, vlist := range groups {
res = append(res, vlist...)
}
*data = &multi_market_overview.MultiMarketSummaryPriceBandDistributionDatatableData{
Datatable: res,
}
}
// GetPriceValue Price with data analysis
func GetPriceValue(price string) int64 {
priceRegexp := regexp.MustCompile(`^([0-9]+).*`)
priceValues := priceRegexp.FindStringSubmatch(price)
if priceValues == nil || len(priceValues) <= 1 {
return 0
}
i, err := strconv.ParseInt(priceValues[1], 10, 64)
if err != nil {
return 0
}
return i
}among , The sorting code is go sdk Provided go1.16.4/src/sort/slice.go :
// SliceStable sorts the slice x using the provided less
// function, keeping equal elements in their original order.
// It panics if x is not a slice.
//
// The less function must satisfy the same requirements as
// the Interface type's Less method.
func SliceStable(x interface{}, less func(i, j int) bool) {
rv := reflectValueOf(x)
swap := reflectSwapper(x)
stable_func(lessSwap{less, swap}, rv.Len())
}
// Auto-generated variant of sort.go:stable
func stable_func(data lessSwap, n int) {
blockSize := 20
a, b := 0, blockSize
for b <= n {
insertionSort_func(data, a, b)
a = b
b += blockSize
}
insertionSort_func(data, a, n)
for blockSize < n {
a, b = 0, 2*blockSize
for b <= n {
symMerge_func(data, a, a+blockSize, b)
a = b
b += 2 * blockSize
}
if m := a + blockSize; m < n {
symMerge_func(data, a, m, n)
}
blockSize *= 2
}
}
package sort
// Auto-generated variant of sort.go:insertionSort
func insertionSort_func(data lessSwap, a, b int) {
for i := a + 1; i < b; i++ {
for j := i; j > a && data.Less(j, j-1); j-- {
data.Swap(j, j-1)
}
}
}边栏推荐
- hash---------history
- 账号多开是什么意思?为什么要账号多开?如何安全实现?
- JVM原理之完整的一次GC流程
- 牛B程序员在“创建索引”时都会注意啥?
- C'est dur de trouver un emploi? Ali des trois côtés, heureusement qu'il s'est bien préparé et qu'il a pris un produit.
- 今日睡眠质量记录80分
- Laravel8 implementation of picture verification code
- Seata四大模式之XA模式详解及代码实现
- Image noise reduction denoise AI
- UnityShader入门精要——Unity中的渲染优化技术(四)
猜你喜欢

Penetration test basis | attached test points and test scenarios

今日睡眠质量记录80分

C'est dur de trouver un emploi? Ali des trois côtés, heureusement qu'il s'est bien préparé et qu'il a pris un produit.

konva 系列教程 1:konva 是什么?

Zygote进程

The tiobe programming language ranking is an indicator of the popular trend of programming languages

Konva series tutorial 1:what is konva?

ES6的Array.from方法创建长度为N的undefined数组

Zygote process

Rtklib new version 2.4.3 B34 test comparison
随机推荐
MCS: discrete random variable Bernoulli distribution
气象绘图软件Panoply使用教程 (不定时更新)
关于信息泄露和防御
MCS:离散随机变量
奇门遁甲辅助决策软件
JDBC入门学习(四)之Druid连接池的使用
第十六届东北地区大学生程序设计竞赛(热身赛)B-String Value(字符串dp)
Go 分组 & 排序
数据库连接异常:create connection error, url: jdbc:mysql://ip/数据库名, errorCode 0, state 08S01问题处理
H5 adaptive full screen
Mmdeploy quick installation and instructions
网上有真实的兼职吗?大学生怎么找暑期兼职?
Mongodb sharding principle
STM32cube CMSIS_V2 freeRTOS Queue 队列使用
Sift特征点提取
Mysql入门学习(三)之视图
架构师之路,从「存储选型」起步
TIOBE 编程语言排行榜是编程语言流行趋势的一个指标
What do Niu B programmers pay attention to when "creating an index"?
Drag and drop frame