Popularity
0.6
Stable
Activity
1.8
Stable
5
1
0

Programming language: Go
Tags: Utilities    
Latest version: v0.3.0

sslice alternatives and similar packages

Based on the "Utilities" category.
Alternatively, view sslice alternatives based on common mentions on social networks and blogs.

Do you think we are missing an alternative of sslice or a related project?

Add another 'Utilities' Package

README

Sorted Slice

godoc Build Status goreportcard License

Package sslice provides functionalities for creating a slice which is always sorted. SortedSlice uses binary search to find the index at which the element must be inserted.

Getting Started

import (
    "github.com/yaa110/sslice"
    "fmt"
)

func main() {
    // Create a new instance of SortedSlice
    ss := sslice.New(false)

    // Push elements
    ss.Push(
        sslice.String("abcd"),
        sslice.String("a"),
        sslice.String("ab"),
    )

    // Push another element
    ss.Push(sslice.String("abc"))

    // Iterate over elements
    //      Output:
    //          0: a
    //          1: ab
    //          2: abc
    //          3: abcd
    ss.Iter(func(index int, elem sslice.SortableElement) bool {
        fmt.Printf("%d: %v\n", index, elem)
        return true // or return false to break the loop
    })
}

For more information please refer to Documentations or check the Example file.

Sortable Elements

All types which implement SortableElement interface could be pushed to SortedSlice. The package sslice provides String, Int, Uint, Int32, Uint32, Int64 and Uint64 aliases to be used.

SortableElement also could be implemented for custom structs:

import "github.com/yaa110/sslice"

type Custom struct {
    field int // Comparable field
    // ...
}

// Compare implements `Compare` method of `SortableElement`
func (receiver *Custom) Compare(other sslice.SortableElement) int {
    if receiver.field < other.(*Custom).field {
        return -1 // receiver is Less than other
    }
    if receiver.field > other.(*Custom).field {
        return 1 // receiver is greater than other
    }
    return 0 // receiver equals other
}

Then Custom struct could be pushed to a SortedSlice:

ss := sslice.New(false)
c1 := &Custom{ field: 1 }
c2 := &Custom{ field: 2 }
ss.push(c1, c2)


*Note that all licence references and agreements mentioned in the sslice README section above are relevant to that project's source code only.