feat(Go-Tool):2020/11/12:新增linq包使用示例(未完成)
This commit is contained in:
+74
@@ -0,0 +1,74 @@
|
||||
package linq
|
||||
|
||||
// Append inserts an item to the end of a collection,
|
||||
// so it becomes the last item.
|
||||
func (q Query) Append(item interface{}) Query {
|
||||
return Query{
|
||||
Iterate: func() Iterator {
|
||||
next := q.Iterate()
|
||||
appended := false
|
||||
|
||||
return func() (interface{}, bool) {
|
||||
i, ok := next()
|
||||
if ok {
|
||||
return i, ok
|
||||
}
|
||||
|
||||
if !appended {
|
||||
appended = true
|
||||
return item, true
|
||||
}
|
||||
|
||||
return nil, false
|
||||
}
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
// Concat concatenates two collections.
|
||||
//
|
||||
// The Concat method differs from the Union method because the Concat method
|
||||
// returns all the original elements in the input sequences.
|
||||
// The Union method returns only unique elements.
|
||||
func (q Query) Concat(q2 Query) Query {
|
||||
return Query{
|
||||
Iterate: func() Iterator {
|
||||
next := q.Iterate()
|
||||
next2 := q2.Iterate()
|
||||
use1 := true
|
||||
|
||||
return func() (item interface{}, ok bool) {
|
||||
if use1 {
|
||||
item, ok = next()
|
||||
if ok {
|
||||
return
|
||||
}
|
||||
|
||||
use1 = false
|
||||
}
|
||||
|
||||
return next2()
|
||||
}
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
// Prepend inserts an item to the beginning of a collection,
|
||||
// so it becomes the first item.
|
||||
func (q Query) Prepend(item interface{}) Query {
|
||||
return Query{
|
||||
Iterate: func() Iterator {
|
||||
next := q.Iterate()
|
||||
prepended := false
|
||||
|
||||
return func() (interface{}, bool) {
|
||||
if prepended {
|
||||
return next()
|
||||
}
|
||||
|
||||
prepended = true
|
||||
return item, true
|
||||
}
|
||||
},
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user