[解決済み] golangのスライスで要素を検索する方法
2022-10-15 02:38:01
質問
構造体のスライスを持っています。
type Config struct {
Key string
Value string
}
// I form a slice of the above struct
var myconfig []Config
// unmarshal a response body into the above slice
if err := json.Unmarshal(respbody, &myconfig); err != nil {
panic(err)
}
fmt.Println(config)
以下はその出力です。
[{key1 test} {web/key1 test2}]
この配列から
key="key1"
?
どのように解決するのですか?
単純な
for
ループを使用します。
for _, v := range myconfig {
if v.Key == "key1" {
// Found!
}
}
なお、スライスの要素型は
struct
(であるため(ポインタではない)、構造体の型が "big" の場合、ループは訪れた各要素をループ変数にコピーするため、非効率的である可能性があります。
を使用する方が速いでしょう。
range
ループを使う方が早いでしょう。
for i := range myconfig {
if myconfig[i].Key == "key1" {
// Found!
}
}
注意事項
複数のコンフィグが同じ
key
で複数のコンフィグが存在するかどうかにもよりますが、もしそうでない場合は
break
にマッチした場合、ループの外に出てください(他のものを探すのを避けるため)。
for i := range myconfig {
if myconfig[i].Key == "key1" {
// Found!
break
}
}
また、この操作が頻繁に行われるのであれば、その度に
map
を構築し、そこから単純にインデックスを作成できるようにすることも検討すべきです。
// Build a config map:
confMap := map[string]string{}
for _, v := range myconfig {
confMap[v.Key] = v.Value
}
// And then to find values by key:
if v, ok := confMap["key1"]; ok {
// Found
}
関連
-
[解決済み] スライス表記を理解する
-
[解決済み] Javascriptで文字列の最後の文字を切り取るにはどうしたらいいですか?
-
[解決済み] JavaScriptで配列を複製する最速の方法 - スライス vs. 'for'ループ
-
[解決済み] 構造体変数をコンソールに表示するには?
-
[解決済み] スライスのメソッドを含む
-
[解決済み】空のスライスを初期化する正しい方法
-
[解決済み】スライスの最後の要素を取得する方法は?
-
[解決済み] reflectを使用して、構造体フィールドの値を設定するにはどうすればよいですか?
-
[解決済み] Goでスライスを逆に反復処理する方法はありますか?
-
[解決済み] スライスを格納する interface{} 上の範囲
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] ゴルーチンの停止方法
-
[解決済み] Goを使って大きなファイルを効率よくダウンロードするにはどうしたらいいですか?
-
[解決済み] スライスを宣言するのか、スライスを作るのか?
-
[解決済み] interface{}をint型に変換する
-
[解決済み] Goでスライスを逆に反復処理する方法はありますか?
-
[解決済み] スライスを格納する interface{} 上の範囲
-
[解決済み] os.Exit()とpanic()はいつ使うのか?
-
[解決済み] 現在時刻に時・分・秒を足す
-
[解決済み] スライスを変数入力として渡すには?
-
[解決済み] Go で子プロセスの標準出力パイプをリダイレクトする