bitSet := true
var bitSetVar int8
がどのように私はこれを行うことができます1方法
としてbitSetVar
からbitSet
を割り当てることができますブールはgolangでINT8へ変換するのですか?
bitSet := true
var bitSetVar int8
がどのように私はこれを行うことができます1方法
としてbitSetVar
からbitSet
を割り当てることができますブールはgolangでINT8へ変換するのですか?
int8
のゼロ値は0
なので、elseブランチは必要ありません。
bitSet := true
var bitSetVar int8
if bitSet {
bitSetVar = 1
}
整数型へbool
からのconversionsはありません。 ifステートメントはあなたができる最高です。メモリ効率の点で
は、
if bitSet {
bitSetVar = 1
} else {
bitSetVar = 0
}
を行うためのあなたのアプローチで行く、あなたはので、私はこれがあなたが期待できる最善であると言うでしょう、あなたのbitSetVar
を設定するために余分な変数を使用していません。実行時の観点で
は、あなたは以下のとおりです。
はあなたがやるべき回数の最小数です一度BITSET の値を、確認します。
の値を1回に設定します。今ティル
、私はあなたができるもので、効率的だったと言うでしょう。
func checkBitSetVar(mybool bool) int8{
if mybool{
return 1
}
return 0 //you just saved youself an else here!
}
:あなたは、コードのこの小さなスニペットは、任意の少ない提示可能なコードを作っている、あなたはこのように、多分checkBitSetVarを呼び出し、関数にそれをシフトすることができると感じた場合、ユーザーの読みやすさの面では
、メインでは次のようにしてください:
setBitVar = checkBitSetVar(bitSet)
私はこれがGoから抜け出すことができると思います。
あなたの方法は現在、最高です。速く、int8をboolに変換するのと同じ方法で、さらに簡単です。
var bitSetVar int8
if bitSet {
bitSetVar = 1
}
Goコミュニティにはこの変換を実装する際に問題がありましたが、すべての人が同意しているとは限りません。
はい、これは、(迅速かつ最適化された)最善の方法である:bitSetVar
は前にゼロで初期化するので、関数内var bitSetVar int8
またはbitSetVar := int8(0)
を使用して
bitSet := true
bitSetVar := int8(0)
if bitSet {
bitSetVar = 1
}
は同じであり、そしてあなたはelse
一部を必要としませんそのif
の表記です。if
を使用すると、このB2i
機能のようにOK(および速い)である
ながら:
func B2i(b bool) int8 {
if b {
return 1
}
return 0
}
しかし、あなたはあまりにもmap
を使用して別のオプションを持っている(ないほど速くif
が、素敵で美しいとして、ここで表示する):
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
}
:(コメント出力を有する)、この作業サンプルコード等
var b2i = map[bool]int8{false: 0, true: 1}