Gå till innehållet

Lösningsförslag till uppgift 7.15

string[] lista1 = { "a", "b", "b", "c", "hej" };
string[] lista2 = { "hej", "a", "a", "b", "programmering" };

string[] båda = FinnsIBåda(lista1, lista2);

foreach (string item in båda)
{
    Console.WriteLine(item);
}


string[] FinnsIBåda(string[] lista1, string[] lista2)
{
    // Ta reda på hur många strängar som finns i båda så att vi vet hur stor den returnerade listan ska vara
    // Spara alla kopior i en temporär array. Det kan maximalt finnas lika många "dubletter" som längen av lista1
    int antalIBåda = 0;
    string[] tempLista = new string[lista1.Length];

    for (int i = 0; i < lista1.Length; i++)
    {
        // Är det första gången strängen undersöks?
        bool strängenFinnsTidigare = false;
        for (int j = 0; j < i; j++)
        {
            if (lista1[i] == lista1[j])
            {
                strängenFinnsTidigare = true;
            }
        }

        if (strängenFinnsTidigare)
        {
            continue;
        }

        // Finns strängen i den andra arrayen?
        for (int j = 0; j < lista2.Length; j++)
        {
            if (lista1[i] == lista2[j])
            {
                tempLista[antalIBåda] = lista1[i];
                antalIBåda++;
                break;
            }
        }
    }

    // Kopiera över alla strängar från templistan till en ny lista som har rätt längd (inte är för lång)
    string[] bådaLista = new string[antalIBåda];

    for (int i = 0; i < antalIBåda; i++)
    {
        bådaLista[i] = tempLista[i];
    }

    return bådaLista;

}