...

/

Solution Review: Sort People with Sorter Interface

Solution Review: Sort People with Sorter Interface

This lesson discusses solution to the challenge given in previous lesson.

We'll cover the following...
package mysort

type Interface interface {
    Len() int
    Less(i, j int) bool
    Swap(i, j int)
}

func Sort(data Interface) {
    for pass:=1; pass < data.Len(); pass++ {
        for i:=0; i < data.Len() - pass; i++ {
            if data.Less(i+1, i) {
                data.Swap(i, i+1)
            }
        }
    }
}

func IsSorted(data Interface) bool {
    n := data.Len()
    for i := n - 1; i > 0; i-- {
        if data.Less(i, i-1) {
            return false
        }
    }
    return true
}

// Convenience types for common cases
type IntSlice []int

func (p IntSlice) Len() int { return len(p) }

func (p IntSlice) Less(i, j int) bool { return p[i] < p[j] }

func (p IntSlice) Swap(i, j int) { p[i], p[j] = p[j], p[i] }

type StringSlice []string

func (p StringSlice) Len() int { return len(p) }


func (p StringSlice) Less(i, j int) bool { return p[i] < p[j] }

func (p StringSlice) Swap(i, j int) { p[i], p[j] = p[j], p[i] }

// Convenience wrappers for common cases
func SortInts(a []int) { Sort(IntSlice(a)) }

func SortStrings(a []string) { Sort(StringSlice(a)) }

func IntsAreSorted(a []int) bool { return IsSorted(IntSlice(a)) }

func StringsAreSorted(a []string) bool { return IsSorted(StringSlice(a)) }

From line 8 to line 11, we define a struct Person with two fields: firstName and LastName. Then at line 13 we define a type Persons as a [ ]Person.

In order to be able to sort Persons, we need to implement the Sorter interface, which is defined in mysort.go- in the mysort ...