iT邦幫忙

0

Golang: 一陣列內無相同值就新增

程式如下:

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]

現在的寫法明顯有問題...
腦子打結了..
/images/emoticon/emoticon06.gif

補充2020/05/28 15:43:
以我給的三組陣列來看
第一段for迴圈跑完正常結果應該是
tmpUserIdArray = [30,31,32]

而輪到第二組陣列開始跑時
應該要挑掉第二組裡面已經重複的30
其結果應該是[30,31,32,29]
這邊不排序無所謂

咖咖拉 iT邦研究生 5 級 ‧ 2020-05-28 15:03:10 檢舉
會員ID會重複
這沒問題嗎..
以我給的三組陣列來看
第一段for迴圈跑完正常結果應該是
tmpUserIdArray = [30,31,32]

而輪到第二組陣列開始跑時
應該要挑掉第二組裡面已經重複的30
其結果應該是[30,31,32,29]
這邊不排序無所謂

2 個回答

0
listennn08
iT邦高手 8 級 ‧ 2020-05-28 15:49:46
最佳解答
// 用 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]
}

demo

太厲害了~
/images/emoticon/emoticon12.gif

我還在那邊用continue和goto在那邊亂試...= =

/images/emoticon/emoticon42.gif

0
阿展展展
iT邦好手 1 級 ‧ 2020-05-28 16:41:59

[]originaldata

[]slice1
[]slice2
[]slice3
.
.
.

[]compareSlice

你要把 originaldata 複製到 []slice1 時
順便把已經有放進去過的值也放到 []compareSlice

要放 []slice2 時 再去比較是否已經放進 []compareSlice
若不在 []compareslice 中 才放入新的 []slice2

同時把放進[]slice2 的 value 也放進[]compareSlice

依此類推
.
.


根據你的命題我只能想到這樣 其實你問題敘述的不...不太清楚

listennn08有最佳解唷~~

我要發表回答

立即登入回答