StrSlice deduplication.

This commit is contained in:
Andrey Smirnov
2014-01-24 17:45:16 +04:00
parent 2fe8f5cc1a
commit 6ffc6056c4
2 changed files with 35 additions and 0 deletions
+26
View File
@@ -75,3 +75,29 @@ func StrMapSortedKeys(m map[string]string) []string {
sort.Strings(keys)
return keys
}
// StrSliceDeduplicate removes dups in slice
func StrSliceDeduplicate(s []string) []string {
l := len(s)
if l < 2 {
return s
}
if l == 2 {
if s[0] == s[1] {
return s[0:1]
}
return s
}
found := make(map[string]bool, l)
j := 0
for i, x := range s {
if !found[x] {
found[x] = true
s[j] = s[i]
j++
}
}
return s[:j]
}
+9
View File
@@ -47,3 +47,12 @@ func (s *ListSuite) TestStrMapSortedKeys(c *C) {
c.Check(StrMapSortedKeys(map[string]string{}), DeepEquals, []string{})
c.Check(StrMapSortedKeys(map[string]string{"x": "1", "a": "3", "y": "4"}), DeepEquals, []string{"a", "x", "y"})
}
func (s *ListSuite) TestStrSliceDeduplicate(c *C) {
c.Check(StrSliceDeduplicate([]string{}), DeepEquals, []string{})
c.Check(StrSliceDeduplicate([]string{"a"}), DeepEquals, []string{"a"})
c.Check(StrSliceDeduplicate([]string{"a", "b"}), DeepEquals, []string{"a", "b"})
c.Check(StrSliceDeduplicate([]string{"a", "a"}), DeepEquals, []string{"a"})
c.Check(StrSliceDeduplicate([]string{"a", "b", "c", "a", "a", "b"}), DeepEquals, []string{"a", "b", "c"})
c.Check(StrSliceDeduplicate([]string{"a", "b", "c", "d", "e", "f"}), DeepEquals, []string{"a", "b", "c", "d", "e", "f"})
}