程式如下:
var tmpUserIdArray []int64
for _, getUserId := range getUserIdArray {
//偵測會員是否重復,並另存一個不重複會員 id 的陣列
if tmpUserIdArray == nil {
tmpUserIdArray = append(tmpUserIdArray, getUserId)
} else {
//for _, getId := range tmpUserIdArray {
//if getId == getUserId {
//continue
//}
//tmpUserIdArray = append(tmpUserIdArray, getUserId)
//}
}
}
註解的這段是我現在有點打結的地方
前面其實還有個for迴圈
目的是會到資料庫撈值出來給getUserIdArray
getUserIdArray的值可能是
[30,31,32]或是
[29,30]或是
[30,32,33,36]之類
數字其實就是會員id
匡起來的陣列代表一個會員群組
現在目的是要根據前面會員群組撈出來的全部會員
另外組一個不重複的陣列tmpUserIdArray
以上面的陣列例子來看
結果要是
[29,30,31,32,33,36]
現在的寫法明顯有問題...
腦子打結了..
補充2020/05/28 15:43:
以我給的三組陣列來看
第一段for迴圈跑完正常結果應該是
tmpUserIdArray = [30,31,32]
而輪到第二組陣列開始跑時
應該要挑掉第二組裡面已經重複的30
其結果應該是[30,31,32,29]
這邊不排序無所謂
// 用 javasrcipt 的 indexOf 思維來解
// 不過 golang 沒有 indexOf 所以就自己造輪
package main
import (
"fmt"
"sort"
)
func indexOf(array []int64, el int64) int {
for i, value := range array {
if (value == el) {
return i
}
}
return -1
}
func main() {
var result []int64
getUserIdArray := []int64{30, 31, 32}
for _, value := range getUserIdArray {
if (indexOf(result, value) == -1) {
result = append(result, value)
}
}
getUserIdArray = []int64{29, 30}
for _, value := range getUserIdArray {
if (indexOf(result, value) == -1) {
result = append(result, value)
}
}
getUserIdArray = []int64{30, 32, 33, 36}
for _, value := range getUserIdArray {
if (indexOf(result, value) == -1) {
result = append(result, value)
}
}
sort.Slice(result, func(n, m int) bool { return result[n] < result[m] })
fmt.Println(result) // [29 30 31 32 33 36]
}
[]originaldata
[]slice1
[]slice2
[]slice3
.
.
.
[]compareSlice
你要把 originaldata 複製到 []slice1 時
順便把已經有放進去過的值也放到 []compareSlice
要放 []slice2 時 再去比較是否已經放進 []compareSlice
若不在 []compareslice 中 才放入新的 []slice2
同時把放進[]slice2 的 value 也放進[]compareSlice
依此類推
.
.
根據你的命題我只能想到這樣 其實你問題敘述的不...不太清楚
listennn08有最佳解唷~~