Frage zur Vereinfachung einer "Suche" in einem Array



  • Schönen guten Abend 🙂

    Es geht um folgendes es soll in einem Array die Namen zweier Fussballteams
    gefunden werden und falls diese vorhanden sind mit einer addResult Methode
    die Ergebnisse verändert werden.

    Ich habe es auch hinbekommen, nur geht es mir nun darum kann man das auch
    "verschönern" oder sagt ihr lass das so.
    Suche eigentlich nur nach Tipps, vielleicht geht es auch einfacher und schöner.

    Mein Denkansatz :
    Mit einer for Schleife den ersten Namen im Array kontrollieren und falls dieser
    vorhanden ist, mit einer weiteren for Schleife den zweiten Namen kontrollieren.

    Und dann die addResult Methode verwenden. Falls eines der Namen nicht im Array vorhanden sind direkt mit return false aus der Funktion.

    Und hier alles in Codeform:

    bool CTeamTable::addResult(string team1, string team2, unsigned int goalsTeam1,
    		unsigned int goalsTeam2)
    {
    	for ( unsigned int i = 0; i < m_curEntry; i++ )
    	{
    		if ( team1 == m_pTable[i].getName() )
    		{
    			for ( unsigned int y = 0; y < m_curEntry; y++ )
    			{
    				if ( team2 == m_pTable[y].getName() )
    				{
    					m_pTable[i].addResult(goalsTeam1,goalsTeam2);
    					m_pTable[y].addResult(goalsTeam2,goalsTeam1);
    					return true;
    				}
    			}
    		}
    	}
    	return false;
    }
    

    Mfg



  • Also erstmal fällt mir hier auf dass man in einem Fall schneller abbrechen könnte, und zwar wenn der erste Teamname gefunden wurde, in der inneren Schleife dann aber der 2. nicht. Also direkt nach inneren Schleife.

    Was verschönern angeht...
    Eine einfache Verschönerung wäre eine Funktion zu machen die ein Team über den Namen sucht.
    Diese Funktion musst du dann in addResult je ein mal für team1 und team2 aufrufen, und wenn beide Aufrufe ein Team gefunden haben kannst du direkt den Eintrag machen. Das macht die Sache übersichtlicher.

    Die einfachste Variante wäre in diesem Fall die Such-Funktion direkt einen Zeiger auf das Team zurückgeben zu lassen. Dann kannst du für "nicht gefunden" einfach nullptr zurückgeben.

    Wenn du den Index des Teams zurückgeben willst müsstest du einen speziellen Wert für "nicht gefunden" reservieren, z.B. den grössten Wert den der verwendete Typ (bei dir unsigned int ) darstellen kann.


Log in to reply