Menu
Coddy logo textTech

まとめ:一意なユーザー名

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

quiz icon腕試し

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

quiz icon腕試し

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

quiz icon腕試し

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

challenge icon

チャレンジ

簡単

Goのセットのイディオムを使用して、重複するユーザー名を防ぐユーザー名登録システムを構築してください。このチャレンジでは、すべての登録においてユーザー名の一意性を保証する、堅牢なユーザー管理システムの作成方法を学びます。

2つの入力を受け取ります:

  • カンマで区切られた既存のユーザー名を含む文字列(例:"alice123,bob_dev,charlie2024,diana_codes"
  • カンマで区切られた新しいユーザー名登録の試行を含む文字列(例:"eve_user,alice123,frank_dev,bob_dev,grace2024,alice123"

あなたのタスクは以下の通りです:

  1. Goのイディオムである map[string]struct{} を使用して、登録済みユーザー名を保存するセットを作成します
  2. 最初の入力文字列をカンマで分割して解析し、既存のユーザー名を取得します
  3. 空の構造体リテラル {} を値として使用し、各既存ユーザー名をセットに追加します
  4. 2番目の入力文字列をカンマで分割して解析し、新しい登録の試行を取得します
  5. 各登録の試行について、comma okイディオムを使用してユーザー名がセットに既に存在するかどうかを確認します
  6. 各試行の登録プロセスを表示します:
    • ユーザー名が利用可能な場合:"Registered: [username]" と表示し、セットに追加します
    • ユーザー名が既に存在する場合:"Username taken: [username]" と表示します
  7. すべての登録試行を処理した後、包括的なサマリーを表示します:
    • "Registration Summary:"
    • "Initial usernames: [initial_count]"
    • "Registration attempts: [attempts_count]"
    • "Successful registrations: [successful_count]"
    • "Rejected (duplicate): [rejected_count]"
    • "Total registered usernames: [total_count]"
  8. 最後に、システム内のすべての登録済みユーザー名をリストします:
    • ヘッダー:"All registered usernames:"
    • 各ユーザー名を個別の行に表示:"@[username]"

入力文字列をカンマで分割するには strings パッケージを使用してください。このチャレンジは、Goのセットのイディオムが、ユーザー登録システムにおける重複防止のための効率的なソリューションを提供し、ユーザー名の検証において高速なルックアップパフォーマンスを提供しながらデータの整合性を確保する方法を示しています。

自分で試してみよう

package main

import (
	"fmt"
	"sort"
	"strings"
)

func main() {
	// 入力を読み込む
	var existingUsernames string
	var newRegistrations string
	fmt.Scanln(&existingUsernames)
	fmt.Scanln(&newRegistrations)
	
	// 入力文字列を解析する
	existing := strings.Split(existingUsernames, ",")
	attempts := strings.Split(newRegistrations, ",")
	
	// Goの慣用句を使用してセットを作成する
	userSet := make(map[string]struct{})
	
	// TODO: 以下にコードを記述してください
	// 1. 既存のユーザー名をセットに追加する
	// 2. 各登録試行を処理する
	// 3. 各試行の登録結果を表示する
	// 4. サマリーを計算して表示する
	// 5. すべての登録済みユーザー名をリストする(一貫した出力のためにソートを忘れないこと)
	
}

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