Go兩個任意類型的Slice比較實現

SliceEquals 用以比較兩個Slice(基礎數據類型,如[]int)內含值是否相等

--------------------------------compare.go---------------------------------

package compare

import "reflect"
// SliceEquals 用以比較兩個Slice(基礎數據類型,如[]int)內含值是否相等
func SliceEquals(a, b interface{}) bool {
   // a,有任意一個不是slice返回false
   _a := reflect.ValueOf(a)
   if _a.Kind() != reflect.Slice {
      panic("param a must be a slice")
   }
   _b := reflect.ValueOf(b)
   if _b.Kind() != reflect.Slice {
      panic("param a must be a slice")
   }
   // 長度不等則兩個slice不同
   if _a.Len() != _b.Len() {
      return false
   }
   // 依次比較每個值
   for i := 0; i < _a.Len(); i++ {
      if _a.Index(i).Interface() != _b.Index(i).Interface() {
         return false
      }
   }
   return true
}

-------------------------------compare_test.go-----------------------------

package compare

import (
   "testing"
)

func TestArrEquals(t *testing.T) {
   s1 := []string{"1", "2"}
   s2 := []string{"1", "2"}
   if !SliceEquals(s1, s2) {
      t.Errorf("not the same")
   }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章