• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

C# Porównywanie dwóch tablic jednowymiarowych

Object Storage Arubacloud
0 głosów
3,262 wizyt
pytanie zadane 12 listopada 2016 w C# przez Neronys Bywalec (2,090 p.)

Witam,

Chcę napisać metodę która porówna ze sobą dwie tablice i zwróci wartość true jeśli obie tablice mają taką samą długość oraz maja takie same wartości na tych samych indeksach czyli kiedy miałbym int tab1[2] = {1,2}; oraz int tab2[2] = {1,2}; to zwraca true. 

Chcę żeby uwzględniała zarówno długość tablicy jak i wartości indeksów. Niestety z tym drugim mam problem.

        /// <summary>
        /// Porównuje dwie tablice.
        /// </summary>
        /// <param name="a">pierwsza tablica do porównania</param>
        /// <param name="b">druga tablica do porównania</param>
        /// <returns>true - gdy tablice są takiego samego rozmiaru i zawierają te same elementy na tych samych miejscach; 
        ///          false w przeciwnym przypadku</returns>
        public static bool equal(int[] a, int[] b)
        {
            bool wynik = false;
            int a_length = a.Length;
            int b_length = b.Length;
            for (int i = 0; i < a.Length; i++)
            {
                for (int z = 0; z < b.Length; z++)
                {
                    if (a_length == b_length && a[i] == b[z]) wynik = true;
                }              
            }

            return wynik;
        } //koniec equal()

 

 

2 odpowiedzi

0 głosów
odpowiedź 13 listopada 2016 przez Knayder Nałogowiec (37,640 p.)
wybrane 13 listopada 2016 przez Neronys
 
Najlepsza

Poprzednia odpowiedź była prawie dobra, ale można to zrobić krócej :)


public static bool equal(int[] a, int[] b)
       {
           bool wynik = true;
           int a_length = a.Length;
           int b_length = b.Length;
 
           if(a_length == b_length)
               for (int i = 0; i < a.Length && wynik; i++)
                   if (a[i] != b[i]) wynik = false;
 
           return wynik;
       } //koniec equal()

Pozdrawiam :)

komentarz 13 listopada 2016 przez Knayder Nałogowiec (37,640 p.)
Czyli pętla kończy pracę jeżeli zauważy jakąkolwiek różnice :)
Pętla działa szybciej :)
0 głosów
odpowiedź 12 listopada 2016 przez niezalogowany
1. Niepotrzebnie od razu implementujesz pętle. Sprawdź najpierw czy długości są takie same - jeśli nie będą, to po co porównywać?

2. Jeśli są takie same, to jedna pętla wystarczy (od 0 do długości którejkolwiek tablicy) i wtedy w ifach porównujesz konkretne indeksy.
komentarz 13 listopada 2016 przez Neronys Bywalec (2,090 p.)

No mam teraz coś takiego. Bardzo proszę o  podpowiedź jak napisać te ify.

 public static bool equal(int[] a, int[] b)
        {
            bool wynik = false;
            int a_length = a.Length;
            int b_length = b.Length;

            if(a_length == b_length)
            {
                for (int i = 0; i < a.Length; i++)
                {
                    if (a[i] == b[i]) wynik = true;
                    else wynik = false;
                }
            }

            return wynik;
        } //koniec equal()

 

komentarz 13 listopada 2016 przez niezalogowany

A co chcesz tam jeszcze zmieniać? Fakt, możnaby to trochę skrócić, ale poza tym jest w porządku

public static bool Equal(int[] a, int[] b) 
{
	if (a.Length != b.Length)
		return false;

	int length = a.Length;
	for (int i = 0; i < length; i++)
		if (a[i] != b[i])
			return false;

	return true;
}

 

public static void Main(string[] args)
{
	int[] tab1 = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };
	int[] tab2 = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };
	int[] tab3 = { 1, 2, 3, 5, 4, 6, 7, 8, 9, 0 };

	Console.WriteLine("tab1 i tab2 : {0}", Equal(tab1, tab2));
	Console.WriteLine("tab1 i tab3 : {0}", Equal(tab1, tab3));
}

 

Podobne pytania

0 głosów
2 odpowiedzi 2,038 wizyt
+1 głos
1 odpowiedź 249 wizyt
0 głosów
1 odpowiedź 861 wizyt

92,584 zapytań

141,434 odpowiedzi

319,671 komentarzy

61,968 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...