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

Jak skrócić tego ifa?

VPS Starter Arubacloud
0 głosów
480 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,300 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 (255,440 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,300 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 (12,290 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 222 wizyt
+1 głos
1 odpowiedź 656 wizyt
pytanie zadane 7 kwietnia 2021 w C i C++ przez Mavimix Dyskutant (8,420 p.)
+1 głos
2 odpowiedzi 470 wizyt

92,843 zapytań

141,782 odpowiedzi

320,858 komentarzy

62,174 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.

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...