package main
import (
"fmt"
"sort"
)
/*
Create a sorted unique slice (slc) from a matrix.
Steps:
1. Flatten matrix into slc
2. Sort slc (sort.Ints)
3. Remove duplicates in-place
*/
func makeSortedUniqueSlc(mat [3][8]int) []int {
// Flatten matrix into slc
slc := make([]int, 0, len(mat)*len(mat[0]))
for _, row := range mat {
for _, x := range row {
slc = append(slc, x)
}
}
// Sort slc
sort.Ints(slc)
// Remove duplicates in-place
u := 0
for i := 0; i < len(slc); i++ {
if i == 0 || slc[i] != slc[i-1] {
slc[u] = slc[i]
u++
}
}
return slc[:u]
}
func main() {
mat := [3][8]int{
{5, 1, 17, 3, 8, 2, 1, 9},
{3, 5, 7, 4, 2, 3, 4, 1},
{9, 1, 8, 2, 3, 88, 17, 5},
}
slc := makeSortedUniqueSlc(mat)
for _, x := range slc {
fmt.Print(x, " ")
}
}
/*
run:
1 2 3 4 5 7 8 9 17 88
*/