Leverage sort Interface to provide sortUnique function

This commit is contained in:
Harshavardhana 2015-10-23 15:54:47 -07:00
parent 9476e0b374
commit 53adfb38f4
2 changed files with 18 additions and 12 deletions

View File

@ -21,6 +21,7 @@ import (
"os"
"path/filepath"
"runtime"
"sort"
"strings"
"github.com/minio/minio-xl/pkg/probe"
@ -356,6 +357,6 @@ func (fs Filesystem) filterObjects(bucket string, content contentInfo, resources
return ObjectMetadata{}, resources, err.Trace()
}
}
sortUnique(resources.CommonPrefixes)
sortUnique(sort.StringSlice(resources.CommonPrefixes))
return metadata, resources, nil
}

View File

@ -45,18 +45,23 @@ func sanitizeWindowsPaths(paths ...string) []string {
return results
}
// sortUnique sort a slice in lexical order, removing duplicate elements
func sortUnique(objects []string) []string {
results := []string{}
seen := make(map[string]string)
for _, val := range objects {
if _, ok := seen[val]; !ok {
results = append(results, val)
seen[val] = val
// sortUnique returns n, the number of distinct elements in data in sorted order.
func sortUnique(data sort.Interface) (n int) {
if n = data.Len(); n < 2 {
return n
}
sort.Sort(data)
a, b := 0, 1
for b < n {
if data.Less(a, b) {
a++
if a != b {
data.Swap(a, b)
}
}
sort.Strings(results)
return results
b++
}
return a + 1
}
type contentInfo struct {