私はいくつかの問題をgo mapを最適化しています。
文字列の配列に頻度テーブル(別々の出現を数えます)を生成したいと思います。私のコードは小さな配列に対してうまくいきますが、100k +構造で作業を始めるときには、多くの異なる値があります。go:アレイ内の別個の値を数えます - パフォーマンスのヒント
私のアプローチは、異なる値を持つ配列を生成し、値を比較し、(文字列にマップされた)カウンタ変数を増やすことです。
counter := make(map[string]int)
for _, distinct := range distinctStrArray{
for _, row := range StrArray{
if (row == distinct){
counter[distinct]++
}
}
}
Iは、入力配列は、以前にソートして(マップの変更の数を最小にする)別のアプローチを試みました。これは少し速いです。
count:=0
for _, distinct := range distinctStrArray{
for _, row := range StrArray{
if (row == distinct){
count++
}
}
counter[distinct] += count
count= 0
}
は、あなたが、私はシンプルな数(個別の)タイプの問題を最適化するために何ができるかのいずれかの提案を持っていますか...?私は何でもできる。
ありがとう!
2番目の例では、入力がソートされている場合は不必要な一致を見つけた後も繰り返し処理を続けます。 'row!= distinct && count> 0'の場合、マッチを見つけた後に最初に不一致になり、入力がソートされてもそれ以降一致することはありませんので、ブレークできます。 – Adrian
2つの配列を持つ目的は何ですか?マップはすでに異なるキーを保証しています。 – Adrian
あなたは正しいです - ネストされたループはパフォーマンスを殺していました。マップは私に別個の値を与えました!場合によっては、複雑すぎるものもあります。 – mik