性能比較スライスは、要素を削除します

パッケージメイン

インポート(
   "試験" 

//第一种
FUNC BenchmarkMake(T * testing.B){ 
   t.ResetTimer()

   起源:= [] INT {1、2、3、4、5、6、7、8 、9、10} 
   iについて:= 0; 私はテネシー州<; {iが++ 
      :=([] INT、LEN(原点))を作る目標
      =レンジ起源{:_、アイテムの
         アイテム= 6 {なら!
            目標=アペンド(対象項目)
         } 
      } 
   } 
} 

//第二种
FUNC BenchmarkReuse (T * testing.B){ 
   t.ResetTimer()

   起源:= [] INT {1、2、3、4、5、6、7、8、9、10} 
   iについて:= 0; 私はテネシー州<; 私は{++ 
      =原点[:0]ターゲットを
      =範囲起源{:_、項目について
         !もしアイテム= 6 { 
            標的=アペンド(対象項目)
         } 
      } 
   } 
} 

//第三种
FUNC BenchmarkEditOne(T * testing.B){ 
   t.ResetTimer()

   起源:= [] INT {1、2、3、4、5、6、7、8、9、10} 
   iについて:= 0; 私はテネシー州<; 私は{++ 
      iについて:= 0; 私は、LEN <(原点); I ++ { 
         原点場合[I] == 6 { 
            原点=アペンド(原点[:i]は、原点[I + 1] ...)
            i--は//正しいインデックス維持する
         } 
      } 
   } 
} 

//を第四种
FUNC BenchmarkFuckさ(t *のtesting.B){ 
   t.ResetTimer()

   起源:= [] INT {1、2、3、4、5、6、7、8、9、10} 
   iについて:= 0; 私はテネシー州<; I ++ {
      iについて:= 0; 私は、LEN <(原点); iは{++ 
         原点なら[I] == 6 { 
            tempV:=原点[i]を
            原点=アペンド((原点付加[:I]、原点[I + 1] tempV、...)を)
            // i-- / /正しいインデックスを維持します
         } 
      } 
   } 
}

コマンドを実行します。テストmain6_test.go -v -bench =を行きます。

出力:

E:\ go_work_dir \テスト\ x>はテストmain6_test.go -v -bench =を行きます。
GOOS:窓の
goarch:AMD64
BenchmarkMake-8千万146ナノ秒/ OP
/ OP BenchmarkReuse-8億10.9 NS
BenchmarkEditOne-8 200000000 7.69 / OP NS
BenchmarkFuck-8億13.4ナノ秒/オペアンプ
PASS
OKコマンドライン引数8.592s


オリジナル:

https://www.jianshu.com/p/d276aa7300d1

おすすめ

転載: blog.51cto.com/5660061/2426094