https://github.com/yoyofx/glinq
Linq and A collection of generic data structures written in Go.
https://github.com/yoyofx/glinq
collection data-structures golang linq
Last synced: 2 months ago
JSON representation
Linq and A collection of generic data structures written in Go.
- Host: GitHub
- URL: https://github.com/yoyofx/glinq
- Owner: yoyofx
- License: mit
- Created: 2022-04-14T08:52:44.000Z (almost 4 years ago)
- Default Branch: main
- Last Pushed: 2022-08-19T06:39:54.000Z (over 3 years ago)
- Last Synced: 2024-06-20T13:34:47.577Z (almost 2 years ago)
- Topics: collection, data-structures, golang, linq
- Language: Go
- Homepage:
- Size: 24.4 KB
- Stars: 6
- Watchers: 2
- Forks: 2
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# glinq
A collection of generic data structures and LINQ written in Go.
## data structures include:
* List
* Linked List
* Array
* Stack
* B Tree
## examples:
```go
var employees = NewListOf([]Employee{
{"Hao", 44, 0, 8000.5},
{"Bob", 36, 10, 5000.5},
{"Alice", 23, 5, 9000.0},
{"Jack", 26, 0, 4000.0},
{"Tom", 48, 9, 7500.75},
{"Marry", 29, 0, 6000.0},
{"Mike", 38, 8, 4000.3},
})
func TestEmployeeList(t *testing.T) {
// 添加 Max 员工
employees.Push(Employee{"Max", 26, 0, 4000.0})
// 所有人的薪水
totalPaySalary := Reduce(employees.ToQueryable(), 0.0, func(result float64, employee Employee) float64 {
return result + employee.Salary
})
assert.Equal(t, totalPaySalary, 43502.05+4000.0)
//统计年龄大于40岁的员工数
orderCount := employees.ToQueryable().Where(func(employee Employee) bool {
return employee.Age > 35
}).Count()
assert.Equal(t, orderCount, 4)
//统计薪水超过 6000元的员工数
moreThan6000Count := employees.ToQueryable().Where(func(employee Employee) bool {
return employee.Salary >= 6000
}).Count()
assert.Equal(t, moreThan6000Count, 4)
//统计年龄小于30岁员工要支付的所有薪水 [ Max: 4000.0, Alice: 9000.0 ,Jack: 4000.0, Marry: 6000.0 ] = 23000.0
employeeQuery := employees.ToQueryable()
// Reduce are equal Sum of Map to Queryable
youngerTotalPaySalary := Reduce(Map(employeeQuery.Where(func(employee Employee) bool {
return employee.Age < 30
}), func(e Employee) float64 {
return e.Salary
}), 0.0, func(result float64, item float64) float64 {
return result + item
})
assert.Equal(t, youngerTotalPaySalary, 23000.0)
}
```