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

Jak skrócić tego ifa?

Object Storage Arubacloud
0 głosów
398 wizyt
pytanie zadane 27 września 2022 w C# przez karolinakla Nowicjusz (160 p.)
class Program
    {
        static void Main(string[] args)
        {

            int[] a;
            int[] b;

            a = new int[] { -2, -1, 0, 1, 4 };
            b = new int[] { -3, -2, -1, 1, 2, 3 };
            for (int i = 0; i < a.Length; i++)
            {
                if (b[0] != a[i] && b[1] != a[i] && b[2] != a[i] && b[3] != a[i] && b[4] != a[i])
                {
                    Console.Write(a[i] + " ");
                }
                else if (a[i] == 0)

                {
                    Console.WriteLine("empty");
                    break;
                }
            }
        }

Domyślam się że jest potrzebna druga pętla, ale nie umiem tego zrobić :c

2 odpowiedzi

+3 głosów
odpowiedź 27 września 2022 przez Sareley Gaduła (4,740 p.)
wybrane 27 września 2022 przez karolinakla
 
Najlepsza

A może z użyciem Linq ? Pamiętaj żeby na początku pliku dodać:

using System.Linq;
static void Main()
{
    var a = new int[] { -2, -1, 0, 1, 4 };
    var b = new int[] { -3, -2, -1, 1, 2, 3 };

    for (int i = 0; i < a.Length; i++)
    {
        if (!b.Contains(a[i]))
        {
            Console.Write(a[i] + " ");
        }
        else if (a[i] == 0)
        {
            Console.WriteLine("empty");
            break;
        }
    }
}

W zasadzie to z użyciem Linq przy typach prostych możesz użyć metody Except żeby pozbyć się powtarzających się elementów

static void Main()
{
    var a = new int[] { -2, -1, 0, 1, 4 };
    var b = new int[] { -3, -2, -1, 1, 2, 3 };

    int[] c = a.Except(b).ToArray();

    foreach (var i in c)
    {
        Console.Write(i + " ");
    }
}

Tutaj jeszcze sposób bez Linq, z użyciem drugiej pętli

static void Main(string[] args)
{
    var a = new int[] { -2, -1, 0, 1, 4 };
    var b = new int[] { -3, -2, -1, 1, 2, 3 };

    for (int i = 0; i < a.Length; i++)
    {
        bool isInArrayA = false;

        for (int j = 0; j < b.Length; j++)
        {
            if (a[i] == b[j])
            {
                isInArrayA = true;
                break;
            }
        }

        if (!isInArrayA)
        {
            Console.Write(a[i] + " ");
        } 
        else if(a[i] == 0)
        {
            Console.WriteLine("empty");
            break;
        }
    }
}

 

komentarz 27 września 2022 przez karolinakla Nowicjusz (160 p.)
Dziękuję <3
1
komentarz 27 września 2022 przez marcin99b Szeryf (82,180 p.)
int[] c = a.Except(b).ToArray();
 
foreach (var i in c)
{
    Console.Write(i + " ");
}

Po co ten ToArray skoro tylko raz po tym iterujesz?

1
komentarz 27 września 2022 przez VBService Ekspert (253,340 p.)

BTW,  wink

foreach (var i in c)
{
    Console.Write(i + " ");
}

// na

Console.Write(String.Join(" ", c));

 

1
komentarz 28 września 2022 przez Sareley Gaduła (4,740 p.)

@marcin99b, Masz rację, nie jest tutaj w ogóle potrzebny. Zrobiłem to wyłącznie po to żeby typ zgadzał się ze zmiennymi a oraz b. Oczywiście, najlepiej operować na interfejsie IEnumerable 

komentarz 28 września 2022 przez marcin99b Szeryf (82,180 p.)

Oczywiście, najlepiej operować na interfejsie IEnumerable 

 nie najlepiej, bo jak sie nie wie co sie robi, to bardzo łatwo można nim rozwalić wydajność 

ale w tym przypadku, jak i tak już masz to ienumerable i chcesz po nim przelecieć tylko raz... to nie widze sensu żeby robić to, a później dodatkowo przelatywać po tych samych danych (po tablicy)

lepiej zrobić mniej akcji niż więcej, jeśli efekt będzie taki sam

0 głosów
odpowiedź 27 września 2022 przez AnimaVillis Stary wyjadacz (11,510 p.)
Druga pętla w pętli for i jeden warunek sprawdzający.
komentarz 27 września 2022 przez karolinakla Nowicjusz (160 p.)

A jak wyglądałby ten warunek, albo wypisywanie?

Próbowałam zrobić tak:

 for (int i = 0; i < a.Length; i++)
            {
                for (int j = 0; j < b.Length; j++)
                {
                    if (a[i] != b[j])
                    {
                        Console.WriteLine(a[i]);
                    }
                    else if (a[i] == 0)

                    {
                        Console.WriteLine("empty");
                        break;
                    }
                }

Ale to jest bezsensu, bo pętla wypisuje mi po kolei wszystkie porównania, a nie te liczby, które nie występują w drugiej tablicy :c 

Podobne pytania

+1 głos
2 odpowiedzi 202 wizyt
+1 głos
1 odpowiedź 545 wizyt
pytanie zadane 7 kwietnia 2021 w C i C++ przez Mavimix Dyskutant (8,390 p.)
+1 głos
2 odpowiedzi 397 wizyt

92,570 zapytań

141,422 odpowiedzi

319,643 komentarzy

61,958 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!

...