2017-03-14 2 views
1

Also ich versuche, ein Scrabble-Spiel zu arbeiten, ich versuche, ein Wörterbuch mit einem int-Hashset Listen zu verwenden. Ich habe die Buchstaben in Gruppen basierend auf ihrem Wert (key = int = score) wie folgt gesetzt. unter Verwendung des gegebenen Wortes und die Summe aller ZiffernÜberprüfung einer Vielzahl von Hashsets in einem Wörterbuch, um den Schlüsselwert zu bekommen

HashSet<char> pointsONEList = new HashSet<char>(new char[] { 'e', 'a', 'i', 'o', 'n', 'r', 't', 'l', 's', 'u' }); 
HashSet<char> pointsTwoList = new HashSet<char>(new char[] { 'd', 'g' }); 
HashSet<char> pointsThreeList = new HashSet<char>(new char[] { 'b', 'c', 'm', 'p' }); 
HashSet<char> pointsFourList = new HashSet<char>(new char[] { 'f', 'h', 'v', 'w', 'y' }); 
HashSet<char> pointsFiveList = new HashSet<char>(new char[] { 'k' }); 
HashSet<char> pointsEightList = new HashSet<char>(new char[] { 'j', 'x' }); 
HashSet<char> pointsTenList = new HashSet<char>(new char[] { 'q', 'z' }); 

Dictionary<int, HashSet<char>> letterPoints = new Dictionary<int, HashSet<char>>(); 

letterPoints.Add(1, pointsONEList); 
letterPoints.Add(2, pointsTwoList); 
letterPoints.Add(3, pointsThreeList); 
letterPoints.Add(4, pointsFourList); 
letterPoints.Add(5, pointsFiveList); 
letterPoints.Add(8, pointsEightList); 
letterPoints.Add(10, pointsTenList); 

Als nächstes muss ich einen Weg finden, außer ein Wort zu nehmen und jedes Zeichen in dem Wort zu finden, ist es in der Liste zu finden und dann zu einem anderen Wörterbuch hinzuzufügen.

das ist, was ich

int N = int.Parse(Console.ReadLine()); 
for (int i = 0; i < N; i++) 
{ 
    string W = Console.ReadLine(); 

    int wordValue=0; 
    char[] splitWord = W.ToCharArray(); 
    for (int j = 0; j < splitWord.Length; j++) 
    { 
     for (int h = 0; h < letterPoints.Count; h++) 
     { 
     } 
    } 
} 

ich bisher haben kann es nicht das gesamte Wörterbuch

+0

hashset speichert nur einzelne Elemente –

+1

Es ist einfacher, nur ein Array der Größe 26 zu haben, das Punkte für jeden Buchstaben enthält, und es wie 'Points [Buchstabe - 'A']' – Lanorkin

+2

oder ein Wörterbuch mit Zeichen als Schlüssel zu referenzieren – slawekwin

Antwort

2

Mit Verwendung LINQ suchen zu bekommen, können Sie es in einer einzigen Zeile tun können:

var points = splitWord.Sum(c => letterPoints.First(kvp => kvp.Value.Contains(c)).Key) 

Was dieser Code tut ist: für jedes Zeichen in der splitWord finden Sie die HashSet aus den letterPoints, die das Zeichen enthält, erhalten Sie die corresp onding-Taste, und summiere alle Schlüssel und erhalte den Gesamtpunkt.

+0

dies tat, danke –

+0

@TravisJeffery froh, dass dies Ihr Problem gelöst, aber ich würde in Betracht ziehen, mit einem Wörterbuch, wo Schlüssel sind die Zeichen und Werte sind die Punkte stattdessen wie in [Kommentare] (http://stackoverflow.com/questions/42779317/checking-a-multiple-hashsets-in-einem-dictionary-to-get-the-key-wert/42779470? Noredirect = 1 # comment72673311_42779317) Sie können immer noch diese Methode mit einem Wörterbuch wie dem, ich bin Ich werde dir das überlassen. –

Verwandte Themen