Saturday 12 January 2019
go - Golang create array from values present in all arrays
Answer
Answer
I need to create an array from multiple arrays. The new array must only contain the values that is present in all arrays passed in. For example.
array1 := []string{"hello", "germany", "brasil", "fiji"}
array2 := []string{"goodbye", "germany", "brasil", "fiji"}
array3 := []string{"hello", "brasil", "fiji"}
array4 := []string{"hello", "brasil", "fiji", "usa"}
func mergeArrays(arrs ...[]string) []string{
// process arrays
}
myNewArray := mergeArrays(array1,array2,array3,array4)
fmt.Println(myNewArray) // ["fiji", "brasil"]
The example should return ["fiji", "brasil"]
since they are the only values present in all arrays.
How could I go about writing a function that could achieve such a goal in golang?
This is my attempt but feels a bit clumsy
func mergeArrays(arrs ...[]string) []string {
var finalArr []string
if len(arrs) == 0 {
return finalArr
}
for i, a := range arrs {
if i == 0 {
finalArr = arrs[0]
continue
}
for i, e := range finalArr {
if !strContains(a, e) {
finalArr = append(finalArr[:i], finalArr[i+1:]...)
}
}
}
return finalArr
}
func strContains(s []string, e string) bool {
for _, a := range s {
if a == e {
return true
}
}
return false
}
Playground link: https://play.golang.org/p/KRygw7OVBbn
Answer
Per my comment above, here's one way to do it with go map
s and thus avoid iterating over potentially large slices:
func itemize(a []string) map[string]struct{} {
m := make(map[string]struct{})
for _, v:=range a {
m[v] = struct{}{} // struct{}{} == an empty struct (i.e. a value that incurs no storage)
}
return m
}
func commonElements(arrs ...[]string) (results []string) {
if len(arrs) == 0 {
return // edge case
}
mm := itemize(arrs[0]) // master map
for i:=1; i m := itemize(arrs[i]) // current map
for k := range mm {
if _, ok := m[k]; !ok {
delete(mm, k) // master item not in current slice, so remove from master
}
}
}
results = make([]string, len(mm)) // make a precisely sized slice...
i:=0
for k := range mm {
results[i] = k // so we can insert results directly into it without using append
i++
}
return
}
https://play.golang.org/p/pTaXR-nY9zm
Subscribe to:
Post Comments (Atom)
php - file_get_contents shows unexpected output while reading a file
I want to output an inline jpg image as a base64 encoded string, however when I do this : $contents = file_get_contents($filename); print &q...
-
I have an app which needs a login and a registration with SQLite. I have the database and a user can login and register. But i would like th...
-
I got an error in my Java program. I think this happens because of the constructor is not intialized properly. My Base class Program public ...
-
I would like to use enhanced REP MOVSB (ERMSB) to get a high bandwidth for a custom memcpy . ERMSB was introduced with the Ivy Bridge micro...
No comments:
Post a Comment