golang linq_golang init执行顺序

golang linq_golang init执行顺序对于集合,go只提供了数组、切片、map类型,不像其它语言类型那样会提供非常丰富的内置结构。借助linq语法,可以让我们省去很多需要使用for循环对数组遍历的操作。

linq在go中的使用"

linq在go中的使用

前言

在刚接触go时,被他的极简风格所震撼,与此同时对隐式接口的设计思想也是极度喜欢。

对于集合,go只提供了数组、切片、map类型,不像其它语言类型那样,会提供非常丰富的内置结构。

比方说,我们需要对切片实现:排序、去重、聚合、条件筛选、GroupBy这些基本操作时,就没有提供内置的方法。

看下面的需求:

var arr:=[]int{4, 1, 5, 3, 4, 1}

需要将切片做去重操作时,就显得比较麻烦,需要我们自己写一个去重函数,然后调用后返回,可能是:

var arr:=[]int{4, 1, 5, 3, 4, 1}
utils.Distinct(arr)  // 对切片的值做去重操作。

虽然也实现了这个需求,但需要我们实现utils.Distinct函数,并且这种方式显的很不优雅。

linq

借助linq语法,可以让我们省去很多需要使用for循环对数组遍历的操作。

在go中也有类似的linq语法,它就是:farseer-go/collections Github开源 官方文档

接下来我们演示下操作:

1、初始化集合

// 第一种
var lst collections.List[int]
lst = collections.NewList[int](1, 2, 3, 4, 5, 6)

// 第二种
lst2 := collections.NewList[string]("a", "b", "c", "d")

// 第三种
var arr:=[]int{4, 1, 5, 3, 4, 1}
lst3 := collections.NewList(arr...)

初始化后,会得到一个:collections.List这个类型,这个类型,提供了50多个方法供我们使用。

2、去重

lst := collections.NewList(4, 1, 5, 3, 4, 1)
lst = lst.Distinct()

这时lst的值 = 4, 1, 5, 3

3、排序

lst := collections.NewList(4, 1, 5, 3, 4, 1)
lst = lst.Distinct()
lst = lst.OrderByItem()             // 正序
lst = lst.OrderByDescendingItem()   // 倒序

// 我们也可以合并到一起写:
lst2 := collections.NewList(4, 1, 5, 3, 4, 1)
lst2 = lst2.Distinct().OrderByItem()            // 正序
lst2 = lst2.Distinct().OrderByDescendingItem()  // 倒序

执行OrderByItem()后,拿到的是:1, 3, 4, 5(正序),执行OrderByDescendingItem()后是:5, 4, 3, 1(倒序)

4、添加元素

这个是基本操作,使用也是很方便的

lst := collections.NewList[int]()
lst.Add(1, 2, 3) // lst = 1, 2, 3
lst.Insert(1, 8) // lst = 1, 8, 2, 3
lst.Count()      // return 4

Add可以让我们在尾部追加元素,而Insert可以指定在Index位置后面追加

5、删除元素

lst := collections.NewList[int](1, 2, 3, 4, 5, 6)
lst.RemoveAt(3)  // lst = 1, 2, 3, 5, 6
lst.Remove(5)  // lst = 1, 2, 3, 6
lst.RemoveAll(func(item int) bool {  // count = 2
    return item >= 3
})
list.Clear() // count = 0

6、获取元素

lst := collections.NewList[int](1, 2, 3, 4, 5, 6)
lst.First()     // return 1
lst.Last()      // return 6
lst.Index(4)    // return item 5
lst.IndexOf(4)  // return index 3

7、条件筛选

lst := collections.NewList[int]()

// 是否有值----------------------------------------------------->
lst.Any()       // return false

// 是否为空----------------------------------------------------->
lst.IsEmpty()   // return true
lst.Add(1)
lst.Any()       // return true
lst.IsEmpty()   // return false

// 是否包含元素----------------------------------------------------->
lst.Contains(1) // return true
lst.Add(2, 3, 4, 5, 6)

// 条件筛选----------------------------------------------------->
lst = lst.Where(func(item int) bool {   // lst = 5, 6
    return item >= 3
}).Where(func(item int) bool {
    return item >= 5
}).ToList()

// 是否都满足----------------------------------------------------->
lst.All(func(item int) bool { // return true
    return item == 5 || item == 6
})

前面说到,这个List集合,是有50多个方法的。这里就不一一展示了,感兴趣的小伙伴可以到官方文档上学习。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/13946.html

(0)

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注