Coder Social home page Coder Social logo

collection's People

Contributors

flc1125 avatar jianfengye avatar liangjfblue avatar monkeywithacupcake avatar nikolasviv avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

collection's Issues

提升排序(sort) 效率

目前sort实现基于选择排序, 本身选择排序的复杂度 o(n * n), 作者在选择每层最大最小值增加了一层contain方法,实际又是一层循环,复杂度已经到 o(nnn)。

希望改进:
1、Icollection 增加复制构造.

2、 基于上边的条件,可以将排序换成快排。复杂度 o(n * log n)

/[email protected]/abs_array.go:957 报超出索引错误

/[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

}

Map函数能否提供像Java那种用法

有个需求是:我有一些id,我想让这些id通过map操作形成一个 []obj 的slice

type Person struct {
	ID        int
	TeacherID int
}

func main() {
	collection.NewObjCollection([]int{1, 2, 3}).Map(func(item interface{}, key int) interface{} {
		val := item.(int)
		return Person{
			ID:        1,
			TeacherID: val,
		}
	}).DD()
}

image

结构体数组如何实现筛选

[]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}, 
}

map 方法 bug

image
根据第一个 字符 判断类型生成 数组 但是 obj 可能是[]interface 生成的是 是普通类型的。
还有这个方法没有continue 部分 func 返回 两个 参数 一个事data 一个是 bool bool判断是否continue

希望添加KeyBy函数

希望实现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}
*/

请教一个线程安全问题

golang 并发对切片进行 append 会有线程安全问题,在使用 collection 的时候, 如需规避这个问题,是不是在每次调用 append 的时候都需要加锁呢,例如:

 var lock sync.Mutex

 lock.Lock()
 collection.append(...)
 lock.Unlock()

除了在 collection 中 使用 append 之外,其他的方法在使用的时候是不是也需要注意线程安全的问题,因为我好像没在源码中看到有任何使用到锁的地方。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.