bitSet := true
var bitSetVar int8
bitSet
をbitSetVar
に1として割り当てるにはどうすればよいですか
私がすることができます:
if bitSet {
bitSetVar = 1
} else {
bitSetVar = 0
}
これが最善の方法ですか?
int8
のゼロ値は0
であるため、elseブランチは不要です。
bitSet := true
var bitSetVar int8
if bitSet {
bitSetVar = 1
}
bool
から整数型への 変換 はありません。 ifステートメントが最善です。
はい、これが最良の方法です(高速で最適化された):
_bitSet := true
bitSetVar := int8(0)
if bitSet {
bitSetVar = 1
}
_
関数内で_var bitSetVar int8
_またはbitSetVar := int8(0)
を使用することは同じであり、else
部分の前にbitSetVar
がゼロで初期化されるため、if
部分は必要ありません。if
の使用中は、この_B2i
_関数のようにOK(かつ高速)です。
_func B2i(b bool) int8 {
if b {
return 1
}
return 0
}
_
ただし、map
を使用する別のオプションもあります(if
ほど高速ではありませんが、ここに表示するのは美しくて美しいです)。
_var b2i = map[bool]int8{false: 0, true: 1}
_
このコメント付きの作業サンプルコードのように:
_package main
import "fmt"
var b2i = map[bool]int8{false: 0, true: 1}
var i2b = []bool{false, true}
func B2i(b bool) int8 {
if b {
return 1
}
return 0
}
func main() {
fmt.Println(B2i(true)) // 1
fmt.Println(B2i(false)) // 0
fmt.Println(b2i[true]) // 1
fmt.Println(b2i[false]) // 0
fmt.Println(i2b[1]) // true
fmt.Println(i2b[0]) // false
}
_
Int8をboolに変換できるのと同じ方法で、さらに簡単に、高速であるため、現在の方法が最適です。また、1行を保存できます。
var bitSetVar int8
if bitSet {
bitSetVar = 1
}
Goコミュニティにはこの変換を実装する問題がありましたが、すべての人が同意しているわけではないようです。
メモリ効率の観点から、あなたのアプローチによって
if bitSet {
bitSetVar = 1
} else {
bitSetVar = 0
}
bitSetVar
を設定するために余分な変数を使用していないため、これが期待できる最高の方法だと思います。
ランタイムに関しては、次のとおりです。
BitSet onceの値を確認します。これは、実行すべき最小回数です。
BitSetVar onceの値を設定します。
今まで、できる限り効率的だったと思います。
ユーザーの読みやすさの観点から、この小さなコードスニペットがコードの見栄えを悪くしていると感じた場合は、次のように関数に変更することができます。
func checkBitSetVar(mybool bool) int8{
if mybool{
return 1
}
return 0 //you just saved youself an else here!
}
そして、主に:
setBitVar = checkBitSetVar(bitSet)
これはGoから抜け出すことができる最高のものだと思います。