Porównywanie wielu wartości do wielu wartości

0

Cześć! Jestem tu nowy i wbrew nazwie forum - nie jestem programistą, więc wybaczcie, jeśli pytania będą głupie.

Mam kilkadziesiąt zmiennych typu string, z których:

string zmiennaA = "burak";
string zmiennaB = "jabłko";
string zmiennaC = "marchew";
string zmiennaD = "truskawka";
...

chciałbym porównać z:

string zmiennaA1 = "buraki";
string zmiennaB1 = "jabłko";
string zmiennaC1 = "marchew";
string zmiennaD1 = "10";
...

na takiej zasadzie, że jeśli zmienna A ==zmienna A1, to zwróć komunikat:

if (zmiennaA==zmiennaA1)
{
  Console.WriteLine("Wartość zmiennej A jest równa wartości zmiennej A1");
}
else
{
  Console.WriteLine("Wartość zmiennej A nie jest równa wartości zmiennej A1");
}

Nie chciałbym za każdym razem powtarzać tego kodu, bo muszę wykonać porównanie kilkadziesiąt razy, a później wykorzystać go jeszcze w innym przypadku.
Czy można te zmienne wpisać do dwóch tablic? Na zasadzie że:

string[] tablica1 = { zmiennaA, zmiennaB, zmiennaC, zmiennaD };
string[] tablica2 = { zmiennaA1, zmiennaB1, zmiennaC1, zmiennaD1 };

a następnie porównywać to w pętli po elementach?

foreach (string i in tablica1)
{
  foreach (string i2 in tablica2)
  {
    if (tablica1[i] == tablica2[i2])
    {
      Console.WriteLine("Wartość zmiennej <tu nazwa zmiennaA> jest równa wartości zmiennej <tu nazwa zmiennaA1>");
    }
    else
    {
      Console.WriteLine("Wartość zmiennej <tu nazwa zmiennaA> nie jest równa wartości zmiennej <tu nazwa zmiennaA1>");
    }
  }
}

Nie potrafię napisać takiego kodu.
A może takie porównanie wykonać w ogóle w inny sposób? Będę wdzięczny za każdą pomoc w temacie :)

3

No skoro porównujesz zawsze elementy o tym samym indeksie między dwoma tablicami, to potrzebujesz jednej pętli.
Twój obecny błąd polega na tym, że masz dwie pętle i porównujesz każdy z każdym.

for (int i = 0; i < tablica1.Length; i++)
{
  if (tablica1[i] == tablica2[i])
0
somekind napisał(a):

No skoro porównujesz zawsze elementy o tym samym indeksie między dwoma tablicami, to potrzebujesz jednej pętli.
Twój obecny błąd polega na tym, że masz dwie pętle i porównujesz każdy z każdym.

for (int i = 0; i < tablica1.Length; i++)
{
  if (tablica1[i] == tablica2[i])

Dzięki za odpowiedź. Czyli mogę dodać elementy do tablicy w taki sposób jak napisałem wyżej?

A w jaki sposób wypisać nazwę (nie wartość) danej zmiennej z tablicy w konsoli?

2
jakami napisał(a):

A w jaki sposób wypisać nazwę (nie wartość) danej zmiennej z tablicy w konsoli?

W skrócie: nie

Szerzej: użyłeś niewłaściwej struktury danych, mogłeś myśleć np o słowniku (Dictionary) w większości języków zwany Map

Najlepiej: a jaki realny problem rozwiązujesz, bo pachnie jak https://typeofweb.com/problem-xy-czyli-gdy-nie-wiemy-o-co-pytamy

0
ZrobieDobrze napisał(a):

W skrócie: nie

Szerzej: użyłeś niewłaściwej struktury danych, mogłeś myśleć np o słowniku (Dictionary) w większości języków zwany Map

Najlepiej: a jaki realny problem rozwiązujesz, bo pachnie jak https://typeofweb.com/problem-xy-czyli-gdy-nie-wiemy-o-co-pytamy

Zadanie jest testerskie i wygląda następująco:

  • odczytać wartości wyświetlane w tabeli A i przypisać je do zmiennych,
  • odczytać wartości wyświetlane w tabeli B i przypisać je do zmiennych,
  • sprawdzić, czy wartości zmiennych z tabeli B są równe wartościom zmiennych z tabeli A,
  • przy sprawdzaniu każdej pary wartości wypisać stosowny komunikat zawierający nazwy porównywanych zmiennych.

To ostatnie na razie sprawia mi problem. Informacja dodatkowa: tak naprawdę nie wypisuję danych w konsoli, tylko w raporcie programu Ranorex, korzystając z własnego kodu w C#.

Na razie poradziłem sobie tak:

string[] tablica1 = { zmiennaA, zmiennaB, zmiennaC, zmiennaD };
string[] tablica1nazwy = { "zmiennaA", "zmiennaB", "zmiennaC", "zmiennaD" };
string[] tablica2 = { zmiennaA1, zmiennaB1, zmiennaC1, zmiennaD1 };
string[] tablica2nazwy = { "zmiennaA1", "zmiennaB1", "zmiennaC1", "zmiennaD1" };

for (int i = 0; i < tablica1.Length; i++)
			{
				if (tablica2[i] == tablica1[i])
				    {
					
					Report.Log(ReportLevel.Success, tablica2nazwy[i] + " is equal to " + tablica1nazwy[i]); 
				    }
				else
				{
					Report.Log(ReportLevel.Failure, tablica2nazwy[i] + " is not equal to " + tablica1nazwy[i]);
				}
			}

Jeśli jest lepszy sposób, to chętnie go poznam.

0

Jeszcze kawa we krwi mi się nie rozeszła, ale tak kawowo wydaje się, że błędem/nieoptymalnością jest orientacja na tablicę, gdy zagadnienie lepiej emulowała by struktura ?
Strktyura przynajmniej dała by się co do nazw odczytać przez refleksję - z tablicą żegnaj, komórki utraciły nazwy, mają tylko wartości.

Oczywiście tzreba by jej napisać komparator
Lub w/w wspomniany map ..

ps. 4 punkty nie mówią nic u budowaniu tablicy w stosunku do "odczytywania"

1 użytkowników online, w tym zalogowanych: 0, gości: 1