Menu
Coddy logo textTech

要素の存在確認

CoddyのGOジャーニー「論理とフロー」セクションの一部。レッスン 34/68。

集合に要素を追加できるようになったところで、次に重要な操作は、特定の要素が集合に存在するかどうかを確認することです。ここで、Go の「comma ok」イディオムが非常に役立ちます。

セット内に要素が存在するか確認するには、マップ内のキーを確認するときと同じ構文を使用します。

_, ok := colors["red"]
if ok {
    fmt.Println("Red is in the set")
} else {
    fmt.Println("Red is not in the set")
}

アンダースコア _ が使われているのは、実際の値(常に空の構造体)を気にしないためです。気にしているのはブール型の ok 変数だけで、これはキーが存在するかどうかを示します。

このパターンを if 文で直接使用して、より簡潔なコードにすることもできます。

if _, exists := colors["blue"]; exists {
    fmt.Println("Blue is in the set")
}

このメンバーシップテストは高速かつ効率的で、Go の最適化された map 実装を活用し、真の set データ構造によるパフォーマンス上の利点を得られます。

challenge icon

チャレンジ

簡単

Go の set idiom を使用して、特定の person がプロジェクトの team に所属しているかを確認する team member verification system を構築してください。この challenge では、set への membership をテストするために comma ok idiom を使用する方法を示します。

2 つの input を受け取ります:

  • comma で区切られた team members を含む string(例:"Alice,Bob,Charlie,Diana,Eve"
  • 確認する people を comma で区切って含む string(例:"Bob,Frank,Alice,Grace,Charlie"

あなたの task は次のとおりです:

  1. Go idiom map[string]struct{} を使用して set を Create し、team members を格納する
  2. 最初の input string を comma で Split し、個々の team member の名前を取得する
  3. 値として empty struct literal {} を使用し、each team member を set に Add する
  4. 2 番目の input string を comma で Split し、verification 対象の people の list を取得する
  5. 確認する each person について、comma ok idiom _, ok := teamSet[person] を使用して membership をテストする
  6. 確認中の each person の verification results を Display する:
    • person が team に所属している場合:"[person] is on the team"
    • person が team に所属していない場合:"[person] is not on the team"
  7. すべての people を確認した後、summary を Display する:
    • "Team size: [team_member_count]"
    • "People checked: [people_checked_count]"
    • "Team members found: [found_count]"
    • "Non-team members: [not_found_count]"

strings package を使用して、input strings を comma で Split してください。この challenge では、comma ok idiom によって Go set の membership を安全かつ効率的に確認でき、value と key が exists かどうかを示す boolean の両方が返される仕組みを示します。

自分で試してみよう

package main

import (
	"fmt"
	"strings"
)

func main() {
	// 入力を読み取る
	var teamMembersInput string
	var peopleToCheckInput string
	fmt.Scanln(&teamMembersInput)
	fmt.Scanln(&peopleToCheckInput)
	
	// 入力文字列を解析する
	teamMembers := strings.Split(teamMembersInput, ",")
	peopleToCheck := strings.Split(peopleToCheckInput, ",")
	
	// TODO: 以下にコードを書いてください
	// map[string]struct{}を使ってセットを作成する
	// チームメンバーをセットに追加する
	// comma okイディオムを使って各人をチェックする
	// 検証結果とサマリーを表示する
	
}
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

論理とフローのすべてのレッスン

自分で練習してみよう: Goオンラインコンパイラ