2017-09-10 12 views
1

ここに学生がいます。リスト< >辞書の中に< K,List< >>(C#)

現在のC#プロジェクトで作業しています。私はトランプカードのリスト<カードを作成し、辞書<ストリング、リスト<カード>を作成しなければなりません。

リストは個別に作成され、辞書はカードのコレクションを保持します。コレクションからカードを追加または削除することができます。

コレクションにカードを追加するのに問題があります。ユーザー入力からリストのインデックス番号を取得しましたが、インデックスに基づいて辞書の値を単純に更新しようとしています。

エラーを投げている行はここにあります。エラーは私の人生のために私は何をその手段と方法を見つけ出すことはできません が暗黙のうちに System.Collections.Generic.List < filename.CardClass>」

に型「< filename.CardClassを>」に変換できませんでそれを解決するために...ここで

_collections[input] = _cards[cardSelectionIndex]; 

は私の現在のコードブロックです:

public void AddToCollection() 
    { 
     PrintValuesCollections<string, List<Card>>(_collections); 
     Console.WriteLine("Type in the name of the collection to add a card to:"); 
     string input = Console.ReadLine(); 

     bool found = _collections.ContainsKey(input); 
     if (found) 
     { 
      Console.WriteLine("List of current cards to choose from:"); 

      for (int i = 0; i < _cards.Count; i++) 
      { 
        Console.WriteLine("Index number:\r\n"+i+"Card Info:\r\n"+_cards[i]+"\n"); 
      } 

      Console.WriteLine("Type in the index of the card from the list to add to the collection:"); 
      string cardSelection = Console.ReadLine(); 
      int cardSelectionIndex = 0; 
      while (!int.TryParse(cardSelection, out cardSelectionIndex)) 
      { 
       Console.Write("Please enter a number from the list above: "); 
       input = Console.ReadLine(); 
      } 

      _collections[input] = _cards[cardSelectionIndex]; 
      _cards.RemoveAt(cardSelectionIndex); 
     } 
     else 
      Console.WriteLine("Collection name not found."); 
    } 
+0

'_collections [入力] .Add(_cards [cardSelectionIndex]);'? – flakes

+0

わかりませんが、これで新しいユニークキーが追加されませんか?私は以前に言及したはずですが、私は既に作成されたキーを持っていて、ユーザーからのキー入力に基づいて値を更新したいだけです。 –

答えて

3

私は_collectionsタイプDictionary<string, List<Card>>とであると仮定します

//_collections[input] = _cards[cardSelectionIndex]; 
List<Card> a = _collections[input]; 
Card b = _cards[cardSelectionIndex]; 
a = b; 

お知らせabの種類という:210だから、これはあなたが何をしようとしてあるList<Card>

です。これは、正しくエラーを与える:「Cannot implicitly convert type '<filename.CardClass>' to System.Collections.Generic.List<filename.CardClass>'

をあなたはおそらく何をしたいのか、私はあなたの例外を少し説明しようと

List<Card> a = _collections[input]; 
Card b = _cards[cardSelectionIndex]; 
a.Add(b); 

または単に

_collections[input].Add(_cards[cardSelectionIndex]); 
+0

それは理にかなっています。説明フレークありがとう! 別のスレッドを開く必要はありません。ユーザー入力のキーに基づいてリストを印刷する必要があります。私は現在使用中です (int i = 0; i <_collections.Keys(入力).Count; i ++) { Console.WriteLine( "インデックス番号:\ r \ n" + i + "カード情報: \ r \ n "+ _cards [i] +" \ n "); } しかし、それは私に呼び出すことのできないメンバー 'Dictionary >を提供しています。キーはメソッドのようには使用できません。 アイデアはありますか? –

+0

@DylanColeDuke問題はありません!残りの日曜日をお楽しみください:) – flakes

+0

'_cards'リストを印刷したい場合は、そのリストを' for'ループで使うべきです。 'for(int i = 0; i <_cards.Count; i ++)... ' – flakes

1

そのリストにカードを追加することですもう少し絵画。

Dictionary<string,List<Card>>を作成しています。それ以外のものはKeyValuePair<string,List<Card>>のリストユニークなキーによってアクセスされます。これは、辞書のすべてのエントリが、string型のキーでインデックスされたカードのリストであることを意味します。例えば

:今

Key | Value 
"hearts" | List<Card> {1, 2, 7, 8, Queen} 
"spades" | List<Card> {King, Ace} 

あなたの例外は、あなただけの一枚のカードでデッキのカードを上書きしようとすることを、あなたに言っています。

これは、あなたが何をすべきかです:

List<Card> spades = collection["spades"]; // King, Ace 
spades = new Card(Queen); // Your Exception 

が、これはあなたがしたいかもしれないものである。

Key | Value 
"hearts" | List<Card> {1, 2, 7, 8, Queen} 
"spades" | List<Card> {King, Ace, Queen} 

とIF:

List<Card> spades = collection["spades"]; // King, Ace 
spades.Add(Card(Queen)); // Add an element to the List 

は今、あなたの辞書には、次のようになりますあなたはコールすることができるあなたのコレクションに "クラブ"のデッキを追加したい:

collection.Add("clubs", new List<Card> {1, 2, 3, Ace}); 

またはショート:

collection["clubs"] = new List<Card> {1, 2, 3, Ace}; 

しかし、キーが辞書にすでにある場合は、最初の1はduplicキー例外を発生させることができますし、そうでない場合は、2番目の1は単に新しいエントリを作成します。気をつけなります既存のものを上書きします。

+0

素晴らしい投稿です! **ユニークキー**がすべてにはっきりしない場合...すべての辞書がキーと値のペアリストで表現できることに注意することが重要ですが、すべてのキーと値のペアリストが辞書であるとは限りません。辞書は、ドメインごとに1つの固有またはゼロの対応を必要とします。 'key-> value'です。通常のキー/値ペアリストは、ドメイン値ごとに複数の対応を持つことができます。この場合のキーは一意であるとは限りません。 – flakes

+0

@flakesあなたは絶対に正しいです。入力いただきありがとうございます。 –

関連する問題