Skip to content
master
Switch branches/tags
Code

Latest commit

 

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
Mar 2, 2019
Jan 10, 2019
Jan 10, 2019
Aug 8, 2021
Aug 8, 2021
Utility class for handling slices.

Go Report Card GoDoc CodeFactor codecov Mentioned in Awesome Go

Install

go get -u github.com/leaanthony/slicer

Quick Start

  import "github.com/leaanthony/slicer"

  func test() {
    s := slicer.String()
    s.Add("one")
    s.Add("two")
    s.AddSlice([]string{"three","four"})
    fmt.Printf("My slice = %+v\n", s.AsSlice())
    
    t := slicer.String()
    t.Add("zero")
    t.AddSlicer(s)
    fmt.Printf("My slice = %+v\n", t.AsSlice())
  }

Available slicers

  • Int
  • Int8
  • Int16
  • Int32
  • Int64
  • UInt
  • UInt8
  • UInt16
  • UInt32
  • UInt64
  • Float32
  • Float64
  • String
  • Bool
  • Interface

API

Construction

Create new Slicers by calling one of the following functions:

  • Int()
  • Int8()
  • Int16()
  • Int32()
  • Int64()
  • Float32()
  • Float64()
  • String()
  • Bool()
  • Interface()
  s := slicer.String()

If you wish to convert an existing slice to a Slicer, you may pass it in during creation:

  values := []string{"one", "two", "three"}
  s := slicer.String(values)

Add

Adds a value to the slice.

  values := []string{"one", "two", "three"}
  s := slicer.String(values)
  s.Add("four")

AddUnique

Adds a value to the slice if it doesn't already contain it.

  values := []string{"one", "two", "three", "one", "two", "three"}
  s := slicer.String(values)
  result := s.Join(",")
  // result is "one,two,three"

AddSlice

Adds an existing slice of values to a slicer

  s := slicer.String([]string{"one"})
  s.AddSlice([]string{"two"})

AsSlice

Returns a regular slice from the slicer.

  s := slicer.String([]string{"one"})
  for _, value := range s.AsSlice() {
    ...
  }

AddSlicer

Adds an existing slicer of values to another slicer

  a := slicer.String([]string{"one"})
  b := slicer.String([]string{"two"})
  a.AddSlicer(b)

Filter

Filter the values of a slicer based on the result of calling the given function with each value of the slice. If it returns true, the value is added to the result.

  a := slicer.Int([]int{1,5,7,9,6,3,1,9,1})
  result := a.Filter(func(v int) bool {
    return v > 5
  })
  // result is []int{7,9,9}
  

Each

Each iterates over all the values of a slicer, passing them in as paramter to a function

  a := slicer.Int([]int{1,5,7,9,6,3,1,9,1})
  result := 0
  a.Each(func(v int) {
    result += v
  })
  // result is 42

Contains

Contains returns true if the slicer contains the given value

  a := slicer.Int([]int{1,5,7,9,6,3,1,9,1})
  result := a.Contains(9)
  // result is True

Join

Returns a string with the slicer elements separated by the given separator

  a := slicer.String([]string{"one", "two", "three"})
  result := a.Join(",")
  // result is "one,two,three"

Length

Returns the length of the slice

  a := slicer.String([]string{"one", "two", "three"})
  result := a.Length()
  // result is 3

Clear

Clears all elements from the current slice

  a := slicer.String([]string{"one", "two", "three"})
  a.Clear()
  // a.Length() == 0

Sort

Sorts the elements of a slice Not supported by: InterfaceSlicer, BoolSlicer

  a := slicer.Int([]int{5,3,4,1,2})
  a.Sort()
  // a is []int{1,2,3,4,5}

Deduplicate

Deduplicate removes all duplicates within a slice.

  a := slicer.Int([]int{5,3,5,1,3})
  a.Deduplicate()
  // a is []int{5,3,1}