jianfengye / collection Goto Github PK
View Code? Open in Web Editor NEWgo collection package for fasting coding
License: Apache License 2.0
go collection package for fasting coding
License: Apache License 2.0
目前sort实现基于选择排序, 本身选择排序的复杂度 o(n * n), 作者在选择每层最大最小值增加了一层contain方法,实际又是一层循环,复杂度已经到 o(nnn)。
希望改进:
1、Icollection 增加复制构造.
2、 基于上边的条件,可以将排序换成快排。复杂度 o(n * log n)
str_collection.go第39行 arr2 := NewStrCollection(arr.objs)
它应该是 arr2 := NewStrCollection([]String{})
slice原生的往中间插元素的方法着实写起来不优雅
rt
/[email protected]/abs_array.go:957 有时会报错;
Handler crashed with error runtime error: index out of range [4041] with length 4041
以下代码,如果这个[]string 一直变化 的话, 超长是不是就报错了?
func (arr *AbsCollection) ToStrings() ([]string, error) {
if arr.Err() != nil {
return nil, arr.Err()
}
ret := make([]string, arr.Count())
for i := 0; i < arr.Count(); i++ {
t, err := arr.Index(i).ToString()
if err != nil {
return nil, err
}
ret[i] = t
}
return ret, nil
}
改成如下:?
func (arr *AbsCollection) ToStrings() ([]string, error) {
if arr.Err() != nil {
return nil, arr.Err()
}
size := arr.Count()
ret := make([]string, size)
for i := 0; i < size; i++ {
t, err := arr.Index(i).ToString()
if err != nil {
return nil, err
}
ret[i] = t
}
return ret, nil
}
这不光是一个文档,还是一个检索手册,到时候用的时候,直接按顺序找就好了
RT
golang 并发对切片进行 append 会有线程安全问题,在使用 collection 的时候, 如需规避这个问题,是不是在每次调用 append 的时候都需要加锁呢,例如:
var lock sync.Mutex
lock.Lock()
collection.append(...)
lock.Unlock()
除了在 collection 中 使用 append 之外,其他的方法在使用的时候是不是也需要注意线程安全的问题,因为我好像没在源码中看到有任何使用到锁的地方。
希望实现laravel的keyby如下:
https://learnku.com/docs/laravel/5.8/collections/3916#method-keyby
$collection = collect([
['product_id' => 'prod-100', 'name' => 'Desk'],
['product_id' => 'prod-200', 'name' => 'Chair'],
]);
//根据结构体的字段组合新的数据返回
$keyed = $collection->keyBy('product_id');
/*
[
'prod-100' => ['product_id' => 'prod-100', 'name' => 'Desk'],
'prod-200' => ['product_id' => 'prod-200', 'name' => 'Chair'],
]
*/
go希望返回map类型,key为 keyby的值字符串,value为结构体对象
type User struct {
ID int
UserName string
Age int
}
user1 := User{ID: 1, UserName: "u1", Age: 18}
user2 := User{ID: 2, UserName: "u2", Age: 19}
collection.NewObjCollection([]User{user1, user2}).KeyBy("ID")
/*
"1": User{ID: 1, UserName: "u1", Age: 18},
"2": User{ID: 2, UserName: "u2", Age: 19}
*/
谢谢提醒,已经修复了
Originally posted by @jianfengye in #16 (comment)
First(...func(item interface{}, key int) bool) IMix
如果我传入两个函数进去, 第一个函数无论如何都返回false, 那么第二个函数有什么意义?
int32能支持一下吗?
[]TutorList{
TutorList{Pid:1, Realname:"陈老师", Remark:"", Grade:80},
TutorList{Pid:3, Realname:"陈老师", Remark:"", Grade:60},
TutorList{Pid:3, Realname:"陈老师", Remark:"", Grade:70},
TutorList{Pid:4, Realname:"陈老师", Remark:"", Grade:95}
}
现有上面的结构体数组,请问如何实现筛选?
例如 指定 TutorList.Pid=3
得到
[]TutorList{
TutorList{Pid:3, Realname:"陈老师", Remark:"", Grade:60},
TutorList{Pid:3, Realname:"陈老师", Remark:"", Grade:70},
}
SortByDesc("Key") . SortBy("Key") 排序结果不对,作者可以看下
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.