Go マップのスライスに直接追加
Go では、関連付けられたマップを維持しようとするシナリオに遭遇する可能性があります。スライスを含むルーンを作成し、対応するスライスに要素を追加します。ただし、マップにアクセスして返されたスライスに直接追加する (たとえば、mappedAminoAcid = append(mappedAminoAcid, codon)) と期待どおりに機能しません。代わりに、冗長形式のアクセス (aminoAcidsToCodons[aminoAcid] = append(mappedAminoAcid, codon)) を使用する必要があります。
この動作は、Go がスライスを処理する方法に起因します。 append 関数を使用してスライスに追加すると、新しい要素を収容するために基礎となる配列を拡張する必要がある場合、新しいスライスが返されます。したがって、マップに保存されているスライスを更新するには、文字列の場合と同じように、新しいスライスをマップに割り当てる必要があります。
例:
<code class="go">var x map[string]string x["a"] = "foo" y := x["a"] y = "bar" // x["a"] is still "foo"</code>
コードでは、nil スライスが追加の有効な最初の引数であるという事実を利用できます。
<code class="go">aminoAcidsToCodons := map[rune][]string{} for codon, aminoAcid := range utils.CodonsToAminoAcid { aminoAcidsToCodons[aminoAcid] = append(aminoAcidsToCodons[aminoAcid], codon) }</code>
Go でスライスがどのように機能するかを理解することで、マップでのスライスの追加を含むシナリオを効果的に処理できます。
以上がGo マップのスライスに直接追加すると期待どおりに機能しないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。