feat(Go-Tool):2020/11/16:新增项目案例(按照一定规则对一组数据进行排序分组)
This commit is contained in:
+15
-11
@@ -7,23 +7,27 @@
|
|||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"Go-Tool/util"
|
|
||||||
"Go-Tool/util/reflectM"
|
"Go-Tool/util/reflectM"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"math"
|
||||||
"reflect"
|
"reflect"
|
||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
fmt.Println(util.Crc32Mode("ewqeqweqw", 4))
|
//fmt.Println(util.Crc32Mode("ewqeqweqw", 4))
|
||||||
fmt.Println(util.Crc32Mode("sdasdsa", 4))
|
//fmt.Println(util.Crc32Mode("sdasdsa", 4))
|
||||||
fmt.Println(util.Crc32Mode("dasdsadasdas", 4))
|
//fmt.Println(util.Crc32Mode("dasdsadasdas", 4))
|
||||||
fmt.Println(util.Crc32Mode("321321312", 4))
|
//fmt.Println(util.Crc32Mode("321321312", 4))
|
||||||
fmt.Println(util.Crc32Mode("dsadas", 4))
|
//fmt.Println(util.Crc32Mode("dsadas", 4))
|
||||||
fmt.Println(util.Crc32Mode("dasd23132131", 4))
|
//fmt.Println(util.Crc32Mode("dasd23132131", 4))
|
||||||
fmt.Println(util.Crc32Mode("eqwewqewqd4312312", 4))
|
//fmt.Println(util.Crc32Mode("eqwewqewqd4312312", 4))
|
||||||
fmt.Println(util.Crc32Mode("3123213dasdasdas", 4))
|
//fmt.Println(util.Crc32Mode("3123213dasdasdas", 4))
|
||||||
fmt.Println(util.Crc32Mode("312321dfdsfsdg", 4))
|
//fmt.Println(util.Crc32Mode("312321dfdsfsdg", 4))
|
||||||
fmt.Println(util.Crc32Mode("ewqrewrqwe", 4))
|
//fmt.Println(util.Crc32Mode("ewqrewrqwe", 4))
|
||||||
|
fmt.Println(int(math.Ceil(1.1)))
|
||||||
|
fmt.Println(int(math.Ceil(1.6)))
|
||||||
|
fmt.Println(int(math.Floor(1.1)))
|
||||||
|
fmt.Println(int(math.Floor(1.6)))
|
||||||
//testReflect()
|
//testReflect()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,29 @@
|
|||||||
|
/*
|
||||||
|
* @Author : huangzj
|
||||||
|
* @Time : 2020/11/13 14:55
|
||||||
|
* @Description:
|
||||||
|
*/
|
||||||
|
|
||||||
|
package ProgressTest
|
||||||
|
|
||||||
|
import (
|
||||||
|
"Go-Tool/util/file"
|
||||||
|
"Go-Tool/util/jsonEnhance"
|
||||||
|
)
|
||||||
|
|
||||||
|
type DeliverList struct {
|
||||||
|
Deliver []*Deliver
|
||||||
|
}
|
||||||
|
|
||||||
|
type Deliver struct {
|
||||||
|
Score int
|
||||||
|
AllScore int
|
||||||
|
Id int
|
||||||
|
}
|
||||||
|
|
||||||
|
func MakeData() DeliverList {
|
||||||
|
var deliver DeliverList
|
||||||
|
content, _ := file.ReadJsonFile("F:\\Go_BySelf\\src\\Go-Tool\\ProgressTest\\deliverData.json")
|
||||||
|
jsonEnhance.UnmarshalFromString(content, &deliver)
|
||||||
|
return deliver
|
||||||
|
}
|
||||||
@@ -0,0 +1,140 @@
|
|||||||
|
/*
|
||||||
|
* @Author : huangzj
|
||||||
|
* @Time : 2020/11/16 14:44
|
||||||
|
* @Description:
|
||||||
|
*/
|
||||||
|
|
||||||
|
package ProgressTest
|
||||||
|
|
||||||
|
import (
|
||||||
|
"Go-Tool/util/rand"
|
||||||
|
"fmt"
|
||||||
|
"math"
|
||||||
|
"testing"
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
MinGroupNum = 10
|
||||||
|
MaxGroupNum = 80
|
||||||
|
)
|
||||||
|
|
||||||
|
//需求(直接举例):
|
||||||
|
//总共有100个数据,两个变量,大区间(MaxGroupNum) 为80, 小区间(MinGroupNum)为 10 || 100 和 80 对应的参数 都必须是10的倍数
|
||||||
|
//第一步:先100个数据排序,然后按照80进行划分。
|
||||||
|
//第二步:100划分剩余的数据组成一组
|
||||||
|
//第三步:80个数组再一次排序,按照 10 * 4 进行划分,可以分成两组
|
||||||
|
//第四步:40每组的数据,要分成最后的10 * 4 的4组,按照每次取前5再随机取5个组成一组的方式组成4组
|
||||||
|
//第五步:不足4组的,按照取前5和随机5个的方式进行分组
|
||||||
|
func TestDeliver2(t *testing.T) {
|
||||||
|
|
||||||
|
firstOrderRule = FirstOrderRule
|
||||||
|
secondOrderRule = SecondOrderRule
|
||||||
|
thirdOrderRule = ThirdOrderRule
|
||||||
|
|
||||||
|
list := MakeData() //创建数据
|
||||||
|
resultList := deliver2(list.Deliver) //进行分组操作
|
||||||
|
fmt.Printf(fmt.Sprintf("%v", resultList))
|
||||||
|
}
|
||||||
|
|
||||||
|
func deliver2(delivers []*Deliver) [][]int {
|
||||||
|
|
||||||
|
resultList := make([][]int, 0)
|
||||||
|
newDelivers := make([]*Deliver, 0)
|
||||||
|
//获得第一次按照大区间分组后剩下的元素数量、第一次分组所有组、分到的大组数量
|
||||||
|
leaveNum, partitions, partition := FirstOrder(delivers, newDelivers)
|
||||||
|
|
||||||
|
resultList = withCompletePartition(partitions, resultList) //对完整的分组进行处理
|
||||||
|
resultList = withLeavePartition(resultList, newDelivers, leaveNum, partition) //对剩余的分组进行处理
|
||||||
|
return resultList
|
||||||
|
}
|
||||||
|
|
||||||
|
func withLeavePartition(resultList [][]int, newDelivers []*Deliver, leaveNum int, partition int) [][]int {
|
||||||
|
if leaveNum != 0 {
|
||||||
|
leaveList := newDelivers[partition*MaxGroupNum:]
|
||||||
|
resultList = secondOrder(leaveList, resultList, leaveNum)
|
||||||
|
}
|
||||||
|
return resultList
|
||||||
|
}
|
||||||
|
|
||||||
|
func withCompletePartition(partitions [][]*Deliver, resultList [][]int) [][]int {
|
||||||
|
for _, partition := range partitions {
|
||||||
|
resultList = secondOrder(partition, resultList, len(partition))
|
||||||
|
}
|
||||||
|
return resultList
|
||||||
|
}
|
||||||
|
|
||||||
|
func FirstOrder(delivers []*Deliver, newDelivers []*Deliver) (int, [][]*Deliver, int) {
|
||||||
|
newDelivers = firstOrderRule(delivers) //第一次排序
|
||||||
|
partition := len(newDelivers) / MaxGroupNum
|
||||||
|
leaveNum := len(newDelivers) % MaxGroupNum
|
||||||
|
partitions := make([][]*Deliver, 0)
|
||||||
|
|
||||||
|
for i := 0; i < partition; i++ {
|
||||||
|
partitions = append(partitions, newDelivers[i*MaxGroupNum:(i+1)*MaxGroupNum])
|
||||||
|
}
|
||||||
|
return leaveNum, partitions, partition
|
||||||
|
}
|
||||||
|
|
||||||
|
func secondOrder(delivers []*Deliver, resultList [][]int, listNum int) [][]int {
|
||||||
|
newDelivers := secondOrderRule(delivers) //第二次排序
|
||||||
|
|
||||||
|
if listNum > 4*MinGroupNum {
|
||||||
|
fourInOne := listNum / (4 * MinGroupNum)
|
||||||
|
leave := listNum % (4 * MinGroupNum)
|
||||||
|
|
||||||
|
for i := 0; i < fourInOne; i++ {
|
||||||
|
resultList = append(resultList, calculateFourInOne(newDelivers[i*4*MinGroupNum:(i+1)*4*MinGroupNum])...) //四倍在一组的计算
|
||||||
|
}
|
||||||
|
|
||||||
|
if leave != 0 {
|
||||||
|
resultList = append(resultList, calculateByLeft(toList(newDelivers[fourInOne*4*MinGroupNum:]))...)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
resultList = append(resultList, calculateByLeft(toList(newDelivers))...)
|
||||||
|
}
|
||||||
|
return resultList
|
||||||
|
}
|
||||||
|
|
||||||
|
func toList(deliver []*Deliver) [][]int {
|
||||||
|
result := make([][]int, 0)
|
||||||
|
for _, item := range deliver {
|
||||||
|
result = append(result, []int{item.Score, 1})
|
||||||
|
}
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
|
||||||
|
func calculateFourInOne(delivers []*Deliver) [][]int {
|
||||||
|
Ids := thirdOrderRule(delivers) //第三次排序
|
||||||
|
result := calculateByLeft(Ids)
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
|
||||||
|
func calculateByLeft(leftList [][]int) [][]int {
|
||||||
|
result := make([][]int, 0)
|
||||||
|
for len(leftList) != 0 {
|
||||||
|
newList := make([]int, 0)
|
||||||
|
thisGroup := getFirstSome(leftList[0 : MinGroupNum/2]) //先拿到前面的几个
|
||||||
|
|
||||||
|
leftList = leftList[MinGroupNum/2:]
|
||||||
|
//然后在随机随取后面的几个
|
||||||
|
for i := 0; i < int(math.Ceil(MinGroupNum/2)); i++ {
|
||||||
|
newList, leftList = getFrontAndEnd(leftList) //从前部和后部进行组合数组
|
||||||
|
thisGroup = append(thisGroup, newList[0])
|
||||||
|
}
|
||||||
|
|
||||||
|
result = append(result, thisGroup)
|
||||||
|
}
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
|
||||||
|
func getFirstSome(list [][]int) []int {
|
||||||
|
result := make([]int, 0)
|
||||||
|
for _, item := range list {
|
||||||
|
result = append(result, item[0])
|
||||||
|
}
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
|
||||||
|
func getFrontAndEnd(leftList [][]int) ([]int, [][]int) {
|
||||||
|
return rand.GetAwardByWeightWithLeftAward(leftList)
|
||||||
|
}
|
||||||
@@ -0,0 +1,95 @@
|
|||||||
|
/*
|
||||||
|
* @Author : huangzj
|
||||||
|
* @Time : 2020/11/13 12:00
|
||||||
|
* @Description:在工程中有一个需求是对 指定数量的数组进行划分,按照每一层的规则分成对应数量,这边做一个测试.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package ProgressTest
|
||||||
|
|
||||||
|
import (
|
||||||
|
"Go-Tool/util/rand"
|
||||||
|
"fmt"
|
||||||
|
"github.com/ahmetalpbalkan/go-linq"
|
||||||
|
"testing"
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
oneGroupNum = 4
|
||||||
|
)
|
||||||
|
|
||||||
|
//
|
||||||
|
//未完成
|
||||||
|
//需求:有一组结构体【Deliver】,现在需要按照一定的规则把这么多的结构体划分为每组X个元素多组,假设这边X = 10 (前提是Deliver可以整除10)
|
||||||
|
// 第一次按照Score排序,把Deliver划分为每组 8 * 10个元素的多个数组,不足80的按照一组算(如果分数相同,按照Id自然数排序)
|
||||||
|
// 第二次按照Id在每个8 * 10的数组中排序,分成 4 * 10 的两个数组
|
||||||
|
// 第三次按照AllScore进行排序,把 4 * 10的数组,分成两个2 * 10的数组
|
||||||
|
// 第四次在2 * 10的数组中获取前10/2,然后随机在剩下的 2 * 10 - 10/2 的数组中随 10/2 个元素和第一个前五组成一组
|
||||||
|
//
|
||||||
|
// 在第一次划分中,不满8 * 10的数组,按照数组划分往下计算
|
||||||
|
//
|
||||||
|
func TestDeliver(t *testing.T) {
|
||||||
|
list := MakeData() //创建数据
|
||||||
|
deliver(list.Deliver) //进行分组操作
|
||||||
|
}
|
||||||
|
|
||||||
|
func deliver(list []*Deliver) {
|
||||||
|
group := len(list) / (8 * oneGroupNum) //求组数
|
||||||
|
//lastNum := len(list) % (8*oneGroupNum) //求最后一组的数量(余数),如果为0则说明除得尽,不需要额外操作
|
||||||
|
query := linq.From(list).OrderByDescending(func(i interface{}) interface{} {
|
||||||
|
return i.(*Deliver).Score
|
||||||
|
})
|
||||||
|
queryList := make([]linq.Query, 0)
|
||||||
|
queryList2 := make([]linq.Query, 0)
|
||||||
|
queryList3 := make([]linq.Query, 0)
|
||||||
|
|
||||||
|
//第一个步骤:按照Score排序并划分
|
||||||
|
for i := 0; i < group; i++ {
|
||||||
|
//每次数组的创建都要先去掉前面的8 * 10个元素,再取此时的8*10个元素作为当前组.因为linq没有对应取区间的方法..
|
||||||
|
queryList = append(queryList, query.Skip(i*8*oneGroupNum).Take(8*oneGroupNum))
|
||||||
|
}
|
||||||
|
|
||||||
|
//第二个步骤:按照Id排序并划分
|
||||||
|
for i, item := range queryList {
|
||||||
|
for j := 0; j < len(queryList[i].Results())/(4*oneGroupNum); j++ {
|
||||||
|
queryList2 = append(queryList2, item.OrderByDescending(func(result interface{}) interface{} {
|
||||||
|
return result.(*Deliver).Id
|
||||||
|
}).Skip(j*4*oneGroupNum).Take(4*oneGroupNum))
|
||||||
|
}
|
||||||
|
fmt.Println()
|
||||||
|
}
|
||||||
|
|
||||||
|
//第三个步骤:按照AllScore进行排序并划分
|
||||||
|
for i, item := range queryList2 {
|
||||||
|
queryList3 = append(queryList3, item.OrderByDescending(func(i interface{}) interface{} {
|
||||||
|
return i.(*Deliver).AllScore
|
||||||
|
}).Skip(i*2*oneGroupNum).Take(2*oneGroupNum))
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, item := range queryList3 {
|
||||||
|
deliver := make([]*Deliver, 0)
|
||||||
|
fmt.Println(item.Results())
|
||||||
|
item.ToSlice(&deliver)
|
||||||
|
delivers := toIntList(deliver[0 : oneGroupNum/2])
|
||||||
|
left := toIntList(deliver[oneGroupNum/2:])
|
||||||
|
for i := 0; i < oneGroupNum/2; i++ {
|
||||||
|
result := make([]int, 0)
|
||||||
|
result, left = rand.GetAwardByWeightWithLeftAward(left)
|
||||||
|
delivers = append(delivers, result)
|
||||||
|
}
|
||||||
|
fmt.Println(delivers)
|
||||||
|
fmt.Println(left)
|
||||||
|
}
|
||||||
|
|
||||||
|
//第四个步骤:排序划分然后进行随机组合.
|
||||||
|
|
||||||
|
fmt.Printf("")
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
func toIntList(delivers []*Deliver) [][]int {
|
||||||
|
list := make([][]int, 0)
|
||||||
|
for _, item := range delivers {
|
||||||
|
list = append(list, []int{item.Id, item.AllScore, 1})
|
||||||
|
}
|
||||||
|
return list
|
||||||
|
}
|
||||||
@@ -0,0 +1,49 @@
|
|||||||
|
/*
|
||||||
|
* @Author : huangzj
|
||||||
|
* @Time : 2020/11/16 18:00
|
||||||
|
* @Description:
|
||||||
|
*/
|
||||||
|
|
||||||
|
package ProgressTest
|
||||||
|
|
||||||
|
import "github.com/ahmetalpbalkan/go-linq"
|
||||||
|
|
||||||
|
type orderRule = func([]*Deliver) []*Deliver
|
||||||
|
type intOrderRule = func([]*Deliver) [][]int
|
||||||
|
|
||||||
|
var (
|
||||||
|
firstOrderRule orderRule
|
||||||
|
secondOrderRule orderRule
|
||||||
|
thirdOrderRule intOrderRule
|
||||||
|
)
|
||||||
|
|
||||||
|
func FirstOrderRule(delivers []*Deliver) []*Deliver {
|
||||||
|
var newDelivers []*Deliver
|
||||||
|
linq.From(delivers).OrderByDescending(func(d interface{}) interface{} {
|
||||||
|
return d.(*Deliver).Score
|
||||||
|
}).ToSlice(&newDelivers)
|
||||||
|
return newDelivers
|
||||||
|
}
|
||||||
|
|
||||||
|
func SecondOrderRule(delivers []*Deliver) []*Deliver {
|
||||||
|
newDeliver := make([]*Deliver, 0)
|
||||||
|
//第二次排序
|
||||||
|
linq.From(delivers).OrderByDescending(func(d interface{}) interface{} {
|
||||||
|
return d.(*Deliver).Score
|
||||||
|
}).ThenBy(func(d interface{}) interface{} {
|
||||||
|
return d.(*Deliver).Id
|
||||||
|
}).ToSlice(&newDeliver)
|
||||||
|
|
||||||
|
return newDeliver
|
||||||
|
}
|
||||||
|
|
||||||
|
func ThirdOrderRule(delivers []*Deliver) [][]int {
|
||||||
|
Ids := make([][]int, 0)
|
||||||
|
//第三次排序
|
||||||
|
linq.From(delivers).OrderByDescending(func(d interface{}) interface{} {
|
||||||
|
return d.(*Deliver).Score
|
||||||
|
}).Select(func(i interface{}) interface{} {
|
||||||
|
return []int{i.(*Deliver).Score, 1}
|
||||||
|
}).ToSlice(&Ids)
|
||||||
|
return Ids
|
||||||
|
}
|
||||||
@@ -0,0 +1,504 @@
|
|||||||
|
{
|
||||||
|
"Deliver": [
|
||||||
|
{
|
||||||
|
"Score": 1,
|
||||||
|
"AllScore": 20000,
|
||||||
|
"Id": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Score": 23,
|
||||||
|
"AllScore": 4321423,
|
||||||
|
"Id": 5
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Score": 19,
|
||||||
|
"AllScore": 43214,
|
||||||
|
"Id": 3
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Score": 39,
|
||||||
|
"AllScore": 41324,
|
||||||
|
"Id": 12
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Score": 41,
|
||||||
|
"AllScore": 2314,
|
||||||
|
"Id": 55
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Score": 42,
|
||||||
|
"AllScore": 654,
|
||||||
|
"Id": 23
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Score": 49,
|
||||||
|
"AllScore": 765,
|
||||||
|
"Id": 16
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Score": 98,
|
||||||
|
"AllScore": 7876,
|
||||||
|
"Id": 57
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Score": 88,
|
||||||
|
"AllScore": 8909,
|
||||||
|
"Id": 77
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Score": 77,
|
||||||
|
"AllScore": 4532,
|
||||||
|
"Id": 89
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Score": 341,
|
||||||
|
"AllScore": 356536,
|
||||||
|
"Id": 24
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Score": 123,
|
||||||
|
"AllScore": 67456,
|
||||||
|
"Id": 19
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Score": 67,
|
||||||
|
"AllScore": 8768,
|
||||||
|
"Id": 31
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Score": 33,
|
||||||
|
"AllScore": 457,
|
||||||
|
"Id": 80
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Score": 32,
|
||||||
|
"AllScore": 76,
|
||||||
|
"Id": 98
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Score": 43,
|
||||||
|
"AllScore": 6787,
|
||||||
|
"Id": 100
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Score": 45,
|
||||||
|
"AllScore": 8756,
|
||||||
|
"Id": 121
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Score": 89,
|
||||||
|
"AllScore": 98765,
|
||||||
|
"Id": 114
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Score": 55,
|
||||||
|
"AllScore": 234,
|
||||||
|
"Id": 117
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Score": 56,
|
||||||
|
"AllScore": 8765,
|
||||||
|
"Id": 135
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Score": 90,
|
||||||
|
"AllScore": 345,
|
||||||
|
"Id": 201
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Score": 135,
|
||||||
|
"AllScore": 456543,
|
||||||
|
"Id": 331
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Score": 56,
|
||||||
|
"AllScore": 6354677,
|
||||||
|
"Id": 156
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Score": 54,
|
||||||
|
"AllScore": 8765,
|
||||||
|
"Id": 178
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Score": 34,
|
||||||
|
"AllScore": 42352,
|
||||||
|
"Id": 891
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Score": 21,
|
||||||
|
"AllScore": 24359,
|
||||||
|
"Id": 444
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Score": 45,
|
||||||
|
"AllScore": 8735,
|
||||||
|
"Id": 333
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Score": 23,
|
||||||
|
"AllScore": 68477,
|
||||||
|
"Id": 251
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Score": 47,
|
||||||
|
"AllScore": 847645,
|
||||||
|
"Id": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Score": 69,
|
||||||
|
"AllScore": 76536,
|
||||||
|
"Id": 1455
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Score": 67,
|
||||||
|
"AllScore": 7654352,
|
||||||
|
"Id": 1871
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Score": 48,
|
||||||
|
"AllScore": 36356,
|
||||||
|
"Id": 1980
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Score": 47,
|
||||||
|
"AllScore": 635763,
|
||||||
|
"Id": 2001
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Score": 45,
|
||||||
|
"AllScore": 365436,
|
||||||
|
"Id": 2100
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Score": 12,
|
||||||
|
"AllScore": 63422,
|
||||||
|
"Id": 2381
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Score": 16,
|
||||||
|
"AllScore": 35654,
|
||||||
|
"Id": 7
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Score": 14,
|
||||||
|
"AllScore": 635634,
|
||||||
|
"Id": 391
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Score": 12,
|
||||||
|
"AllScore": 63542,
|
||||||
|
"Id": 781
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Score": 11,
|
||||||
|
"AllScore": 63553,
|
||||||
|
"Id": 171
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Score": 99,
|
||||||
|
"AllScore": 8758768,
|
||||||
|
"Id": 392
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Score": 88,
|
||||||
|
"AllScore": 97658,
|
||||||
|
"Id": 511
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Score": 77,
|
||||||
|
"AllScore": 87576,
|
||||||
|
"Id": 501
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Score": 66,
|
||||||
|
"AllScore": 85675867,
|
||||||
|
"Id": 1819
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Score": 55,
|
||||||
|
"AllScore": 412343,
|
||||||
|
"Id": 1971
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Score": 44,
|
||||||
|
"AllScore": 314232,
|
||||||
|
"Id": 1333
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Score": 33,
|
||||||
|
"AllScore": 3211324,
|
||||||
|
"Id": 1555
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Score": 22,
|
||||||
|
"AllScore": 4132421,
|
||||||
|
"Id": 2221
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Score": 43,
|
||||||
|
"AllScore": 65437,
|
||||||
|
"Id": 17777
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Score": 12,
|
||||||
|
"AllScore": 76444,
|
||||||
|
"Id": 4411
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Score": 86,
|
||||||
|
"AllScore": 8976,
|
||||||
|
"Id": 5111
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Score": 55,
|
||||||
|
"AllScore": 98467,
|
||||||
|
"Id": 18821
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Score": 98,
|
||||||
|
"AllScore": 765265,
|
||||||
|
"Id": 11771
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Score": 67,
|
||||||
|
"AllScore": 54235,
|
||||||
|
"Id": 15666
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Score": 78,
|
||||||
|
"AllScore": 52345,
|
||||||
|
"Id": 18912
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Score": 67,
|
||||||
|
"AllScore": 523452,
|
||||||
|
"Id": 10912
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Score": 34,
|
||||||
|
"AllScore": 523452,
|
||||||
|
"Id": 18712
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Score": 12,
|
||||||
|
"AllScore": 565764,
|
||||||
|
"Id": 166271
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Score": 50,
|
||||||
|
"AllScore": 87654,
|
||||||
|
"Id": 1909342
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Score": 36,
|
||||||
|
"AllScore": 475647,
|
||||||
|
"Id": 118223
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Score": 49,
|
||||||
|
"AllScore": 875658,
|
||||||
|
"Id": 82178
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Score": 54,
|
||||||
|
"AllScore": 857346,
|
||||||
|
"Id": 341223
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Score": 21,
|
||||||
|
"AllScore": 745674,
|
||||||
|
"Id": 31321
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Score": 56,
|
||||||
|
"AllScore": 74674567,
|
||||||
|
"Id": 98897
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Score": 12,
|
||||||
|
"AllScore": 745746,
|
||||||
|
"Id": 1891
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Score": 98,
|
||||||
|
"AllScore": 9879875,
|
||||||
|
"Id": 103921
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Score": 64,
|
||||||
|
"AllScore": 7446,
|
||||||
|
"Id": 1784671
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Score": 77,
|
||||||
|
"AllScore": 456746,
|
||||||
|
"Id": 1903213
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Score": 7,
|
||||||
|
"AllScore": 52345423,
|
||||||
|
"Id": 19123312
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Score": 4,
|
||||||
|
"AllScore": 2543252,
|
||||||
|
"Id": 1012813
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Score": 2,
|
||||||
|
"AllScore": 413243124,
|
||||||
|
"Id": 167316312
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Score": 1,
|
||||||
|
"AllScore": 41324,
|
||||||
|
"Id": 19321321
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Score": 12,
|
||||||
|
"AllScore": 5234,
|
||||||
|
"Id": 132144
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Score": 99,
|
||||||
|
"AllScore": 1234124,
|
||||||
|
"Id": 13215467
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Score": 100,
|
||||||
|
"AllScore": 43214,
|
||||||
|
"Id": 195342
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Score": 90,
|
||||||
|
"AllScore": 43214,
|
||||||
|
"Id": 1098768634
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Score": 78,
|
||||||
|
"AllScore": 43124132,
|
||||||
|
"Id": 108698
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Score": 56,
|
||||||
|
"AllScore": 54325,
|
||||||
|
"Id": 1098734
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Score": 89,
|
||||||
|
"AllScore": 65354,
|
||||||
|
"Id": 13432112
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Score": 78,
|
||||||
|
"AllScore": 63543,
|
||||||
|
"Id": 1343465
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Score": 65,
|
||||||
|
"AllScore": 4676745,
|
||||||
|
"Id": 17657786
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Score": 31,
|
||||||
|
"AllScore": 47647,
|
||||||
|
"Id": 13542354
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Score": 55,
|
||||||
|
"AllScore": 8476545,
|
||||||
|
"Id": 142365676
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Score": 31,
|
||||||
|
"AllScore": 1000,
|
||||||
|
"Id": 135467
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Score": 67,
|
||||||
|
"AllScore": 6357854,
|
||||||
|
"Id": 1658658
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Score": 12,
|
||||||
|
"AllScore": 653535,
|
||||||
|
"Id": 1523456324
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Score": 56,
|
||||||
|
"AllScore": 655462,
|
||||||
|
"Id": 17654899
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Score": 12,
|
||||||
|
"AllScore": 635,
|
||||||
|
"Id": 10009767
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Score": 65,
|
||||||
|
"AllScore": 365342,
|
||||||
|
"Id": 1568534
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Score": 55,
|
||||||
|
"AllScore": 63556,
|
||||||
|
"Id": 11324136
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Score": 89,
|
||||||
|
"AllScore": 63553,
|
||||||
|
"Id": 108768745
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Score": 98,
|
||||||
|
"AllScore": 76245,
|
||||||
|
"Id": 122213241
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Score": 87,
|
||||||
|
"AllScore": 76467,
|
||||||
|
"Id": 21343441
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Score": 54,
|
||||||
|
"AllScore": 76467,
|
||||||
|
"Id": 43232131
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Score": 12,
|
||||||
|
"AllScore": 1000,
|
||||||
|
"Id": 7654761
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Score": 45,
|
||||||
|
"AllScore": 635765,
|
||||||
|
"Id": 78689231
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Score": 27,
|
||||||
|
"AllScore": 635346,
|
||||||
|
"Id": 987653121
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Score": 19,
|
||||||
|
"AllScore": 3653,
|
||||||
|
"Id": 76321111
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Score": 54,
|
||||||
|
"AllScore": 6543,
|
||||||
|
"Id": 923438321
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Score": 21,
|
||||||
|
"AllScore": 543254423,
|
||||||
|
"Id": 9034241321
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"Score": 18,
|
||||||
|
"AllScore": 43124321,
|
||||||
|
"Id": 9432143211
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -56,6 +56,8 @@
|
|||||||
|
|
||||||
2020/11/12:新增linq包使用示例(未完成)
|
2020/11/12:新增linq包使用示例(未完成)
|
||||||
|
|
||||||
|
2020/11/16:新增项目案例(按照一定规则对一组数据进行排序分组)
|
||||||
|
|
||||||
|
|
||||||
# mod vendor模式加载包
|
# mod vendor模式加载包
|
||||||
通过go mod的方式加载的github上面的包会有报红的问题,但是包本身是可以运行的,这样就是会有一个问题,如果你想要点击去看方法的内容,没办法做到
|
通过go mod的方式加载的github上面的包会有报红的问题,但是包本身是可以运行的,这样就是会有一个问题,如果你想要点击去看方法的内容,没办法做到
|
||||||
|
|||||||
@@ -0,0 +1,33 @@
|
|||||||
|
/*
|
||||||
|
* @Author : huangzj
|
||||||
|
* @Time : 2020/11/13 9:34
|
||||||
|
* @Description:
|
||||||
|
*/
|
||||||
|
|
||||||
|
package jsonEnhance
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/json-iterator/go"
|
||||||
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
//config 默认配置
|
||||||
|
config = jsoniter.ConfigFastest
|
||||||
|
)
|
||||||
|
|
||||||
|
func MarshalToString(v interface{}) string {
|
||||||
|
|
||||||
|
s, err := config.MarshalToString(v)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
return s
|
||||||
|
}
|
||||||
|
|
||||||
|
//UnmarshalFromString 直接从字符串反序列化
|
||||||
|
func UnmarshalFromString(str string, v interface{}) {
|
||||||
|
err := config.UnmarshalFromString(str, v)
|
||||||
|
if err != nil {
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -29,8 +29,21 @@ func Test(t *testing.T) {
|
|||||||
|
|
||||||
//Combine(query) //组合两个数组的两种方式
|
//Combine(query) //组合两个数组的两种方式
|
||||||
|
|
||||||
//fmt.Println(fmt.Sprintf("跳过三个元素,返回的数组中包含%d个元素", len(query.Skip(3).Results())))
|
fmt.Println(fmt.Sprintf("跳过三个元素,返回的数组中包含%d个元素", len(query.Skip(3).Results())))
|
||||||
//fmt.Println(fmt.Sprintf("跳过发布时间在2020.1.1之前的元素,返回的数组中包含%d个元素", len(query.SkipWhile(PublishTimeBeforeFunc).Results())))
|
fmt.Println(fmt.Sprintf("跳过发布时间在2020.1.1之前的元素,返回的数组中包含%d个元素", len(query.SkipWhile(PublishTimeBeforeFunc).Results()))) //这个方法好像有问题,没办法过滤
|
||||||
|
author := make([]string, 0)
|
||||||
|
query.Select(func(book interface{}) interface{} {
|
||||||
|
return book.(Book).Author
|
||||||
|
}).ToSlice(&author)
|
||||||
|
fmt.Println(author)
|
||||||
|
query1 := linq.From([][]Book{bookList, bookList})
|
||||||
|
query1.SelectMany(func(query interface{}) linq.Query {
|
||||||
|
fmt.Println(query)
|
||||||
|
return linq.From(query)
|
||||||
|
}).Select(func(book interface{}) interface{} {
|
||||||
|
return book.(Book).Author
|
||||||
|
}).ToSlice(&author)
|
||||||
|
fmt.Println(author)
|
||||||
|
|
||||||
//Contains(query) //判断数组中是否包含某个元素
|
//Contains(query) //判断数组中是否包含某个元素
|
||||||
//query.CountWith()
|
//query.CountWith()
|
||||||
|
|||||||
Vendored
+6
@@ -2,3 +2,9 @@
|
|||||||
github.com/ahmetalpbalkan/go-linq
|
github.com/ahmetalpbalkan/go-linq
|
||||||
# github.com/go-ini/ini v1.57.0
|
# github.com/go-ini/ini v1.57.0
|
||||||
github.com/go-ini/ini
|
github.com/go-ini/ini
|
||||||
|
# github.com/json-iterator/go v1.1.10
|
||||||
|
github.com/json-iterator/go
|
||||||
|
# github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421
|
||||||
|
github.com/modern-go/concurrent
|
||||||
|
# github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742
|
||||||
|
github.com/modern-go/reflect2
|
||||||
|
|||||||
Reference in New Issue
Block a user