Két tömb uniója C#-ban

Két tömb uniója C#-ban
2020-12-14T09:05:06+01:00
2020-12-15T01:34:49+01:00
2022-08-11T23:40:30+02:00
csabi881
Adott az alábbi kód:

using System;using System.Collections.Generic;using System.Linq;using Syst - Pastebin.com

Az unio képzésnél elakadtam, elvileg az n és az m tömb unióját kellene hogy kiírja, de csak az n tömb-ét írja ki utána a többi helyet 0-kal tölti fel. Már sokszor átnéztem de nem tudom hogy hol lehet a probléma.

Előre is köszönöm!
Mutasd a teljes hozzászólást!
Mivel használod a System.Linq névteret, gondolom nincs tiltva az abban található logikák alkalmazása. Akkor pedig:

int[] ints1 = { 5, 3, 9, 7, 5, 9, 3, 7 }; int[] ints2 = { 8, 3, 6, 4, 4, 9, 1, 0 }; IEnumerable<int> union = ints1.Union(ints2); foreach (int num in union) { Console.Write("{0} ", num); } /* This code produces the following output: 5 3 9 7 8 6 4 1 0 */
Ez a Microsoft dokumentációjából származik.
Mutasd a teljes hozzászólást!

  • Szia!

    Ez a rész biztos nem jó:

    i = 0; while (i < n.Length && m[j] != n[i]) i++; if (i >= n.Length) {
    Ugyanis, amennyiben van egyezés, akkor az i soha nem lesz nagyobb, mint az n.length.
    Mutasd a teljes hozzászólást!
  • Nem néztem át részletesen a kódot, de ha szabályos matematikai (halmaz) unióról van szó, akkor ugye tényleg nem kellene többször beletenni ugyanazt az elemet, tehát ez még akár helyes is lehet.
    Az viszont így is probléma, hogy ez esetben már a 2 tömb kezdeni feltöltésekor is biztosítani kellene ezt, tehát hogy a program ne rakja bele induláskor 2x (vagy többször) ugyanazt az értéket, ha rand véletlenül ismételt...
    Mutasd a teljes hozzászólást!
  • Mivel használod a System.Linq névteret, gondolom nincs tiltva az abban található logikák alkalmazása. Akkor pedig:

    int[] ints1 = { 5, 3, 9, 7, 5, 9, 3, 7 }; int[] ints2 = { 8, 3, 6, 4, 4, 9, 1, 0 }; IEnumerable<int> union = ints1.Union(ints2); foreach (int num in union) { Console.Write("{0} ", num); } /* This code produces the following output: 5 3 9 7 8 6 4 1 0 */
    Ez a Microsoft dokumentációjából származik.
    Mutasd a teljes hozzászólást!
  • Szia csabi881!

    A legelső tisztázandó kérdés: Mit tekintesz két halmaz uniójának?
    Az a baj, hogy a különböző források más-más meghatározást használnak.
    Az egyik úgy fogalmaz, hogy az A U B unióhalmaz minden eleme megtalálható vagy az A, vagy a B halmazban.
    A másik meghatározás szerint A U B unióhalmaz tartalmazza az A és B halmaz összes elemét.

    példa:
    Legyenek M halmaz elemei a Matematika tantárgyból megszerzett érdemjegyeim, I halmaz elemei pedig, az Informatika tantárgyból megszerzett érdemjegyeim.
    M U I nyilvánvalóan az összes érdemjegyet tartalmazza nem csak egy (1!) jeles érdemjegyet.

    A kérdésed klasszikus példája a nem egyértelmű specifikációnak. Nem tudod pontosan, hogy mit is kellene megválaszolnod.

    Azonban, ha kitartasz azon álláspont mellett, hogy a halmazok egyesítése során nem fordulhat elő az elemek ismétlődése, akkor értelmetlen az unió halmazt n.length+m.length
    elemszámra tervezni. Erre a véletlenszám generálásakor megadott paraméterek adják a magyarázatot. (-15-től 15-ig)

    Én úgy oldanám meg a kérdést, hogy unio(0-99) = n(0-99) továbbá unio(100-149) = m(0-49)

    üdvözlettel
    verax
    Mutasd a teljes hozzászólást!
  • Hali!

    Az egyik úgy fogalmaz, hogy az A U B unióhalmaz minden eleme megtalálható vagy az A, vagy a B halmazban.
    A másik meghatározás szerint A U B unióhalmaz tartalmazza az A és B halmaz összes elemét.

    Ez a két állítás tök ugyanarra az eredményre vezet, tök ugyanazt mondja más szavakkal (most tekintsünk el a második megfogalmazásod azon hiányosságától, hogy „… unióhalmaz csak és kizárólag tartalmazza az…”).

    Azonban, ha kitartasz azon álláspont mellett, hogy a halmazok egyesítése során nem fordulhat elő az elemek ismétlődése…

    Ez alapfelvetés a halmazelméletben, azaz, egy halmaz elemei egymástól különböző elemek.

    Persze, kérdés, hogy a konkrét feladatnál nem fogalmaztak-e meg esetleg másmilyen halmaz-meghatározást.

    Mutasd a teljes hozzászólást!
  • Ha tömbbel akarsz halmazt reprezentálni, akkor gondoskodj arról, hogy a tömb rendezett legyen, és az elemei páronként különbözzenek. Ha ezt teljesül a két inputra, akkor némi gondolkodással rájöhetsz, hogyan lehet őket hatékonyan összefuttatni (avagy összefésülni).
    Mutasd a teljes hozzászólást!
  • Sziasztok!
    Szia netangel!

    Egy halmaz elemeinek nem kell különbözniük egymástól, nem alapvetés. Az más kérdés, hogy a halmazok közötti művelet során az azonos elemeket (esetleg) nem vesszük figyelembe.
    {0, 1, 2} = {0, 0, 0, 1, 1, 2}
    Így végül egy százötven elemű halmaz egyenlő lehet egy harmincegy elemű halmazzal.
    A kérdés továbbra is az marad, hogy mi volt az eredeti feladat. Ha elfogadjuk, az unió és metszet szavakat, akkor a létrehozott ismétlődő elemeket is tartalmazó tömbökön kell a halmaz műveleteket elvégezni.

    Én először, egyesíteném a két tömböt (igaz, bőven tartalmaz redundáns adatot, de ez már unió! - nyertem), majd ezután fognék hozzá a csinosításhoz, a rendezéshez és az ismétlődések eltávolításához. Mindenki más úgy oldja meg a kérdést, ahogy akarja.

    [off]
    A "csak és kizárólag" kifejezés pedig nem hiányzik a második megfogalmazásomból, mivel a két szó egyenértékű, így egymás melletti használatuk indokolatlan.
    Csak neked lehet igazad? Kizárólag neked lehet igazad?

    üdvözlettel
    verax
    Mutasd a teljes hozzászólást!
  • Hali!

    Egy halmaz elemeinek nem kell különbözniük egymástól, nem alapvetés.

    Márpedig különbözniük kell, nyugodtan utánanézhetsz bármilyen definíciónak.

    Az más kérdés, hogy a halmazok közötti művelet során az azonos elemeket (esetleg) nem vesszük figyelembe.
    {0, 1, 2} = {0, 0, 0, 1, 1, 2}

    Nem önkényes döntés eredménye, hogy (esetleg) figyelembe veszem vagy nem az azonos elemeket, mivel nincsenek azonos elemek. A {0, 1, 2} halmaz nem azért egyenlő a {0, 0, 0, 1, 1, 2} halmazzal, mert nem veszem figyelembe az azonos elemeket (többször), hanem azért, mert egyenlő a szó szoros értelmében. Ugyanis, a {0, 0, 0, 1, 1, 2} megadási forma csak egyfajta definiálása a halmaznak, nem azt jelenti, hogy a halmazban három 0-s és két 1-es elem van. Az így megadott halmaz elemszáma ugyanúgy 3 lesz (mint ahogy az elemeknek sorrendje sincs egy halmazban). De kapcsolódva az oldal tematikájához (mármint programozás), pl. bármilyen programnyelvben/fejlesztőeszközben implementált halmaz-adatszerkezetet is nézel, egyik sem ad lehetőséget arra, hogy ugyanazon az elem többször szerepeljen benne (legalábbis azokban, amelyik eszközöket én ismerem).

    Így végül egy százötven elemű halmaz egyenlő lehet egy harmincegy elemű halmazzal.

    Nem, nem lehet egyenlő. Lásd fent.

    A kérdés továbbra is az marad, hogy mi volt az eredeti feladat.

    Így van, ez kérdés. Ugyanis nem ismerjük a feladat-kiírást, így azt sem, hogy ténylegesen halmaz-műveleteket kell megvalósítani C#-ban, vagy valamilyen egyéb, itt nem definiált műveleteket: két tömb unióját és metszetét (bármit is jelentsenek ezek). Ha tippelnem kellene, akkor én az előbbi mellett tenném le a voksom.

    A "csak és kizárólag" kifejezés pedig nem hiányzik a második megfogalmazásomból, mivel a két szó egyenértékű, így egymás melletti használatuk indokolatlan.

    Lovagolhatsz a szavakon (még el is fogadom, hogy tényleg szóismétlés – habár a szakszövegek tele vannak ilyenekkel), a lényegen nem változtat: a korábbi, általad másikként definiált meghatározásod (nevezetesen: „A U B unióhalmaz tartalmazza az A és B halmaz összes elemét”) nem pontos, mivel nem elégséges feltétele az unió(halmaz)nak az, hogy a két halmaz összes elemét tartalmazza. Lényeges az is, hogy semmilyen más elemet nem tartalmazhat. Ha adott A = {1, 2, 3, 4, 5} és B = {4, 5, 6, 7, 8} halmazok, akkor az általad adott „másik meghatározás szerint” a {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10} halmaz az AB unióhalmaz (ami nyilvánvalóan nem igaz), hisz' „tartalmazza az A és B halmaz összes elemét”.

    Csak neked lehet igazad? Kizárólag neked lehet igazad?

    Értem az iróniát a duplikált kérdésfelvetésben. Ellenben a kérdést magát nem értem. Jól definiált matematikai fogalmakról beszélünk, nincs olyan, hogy a te vagy az én igazságom.

    Mutasd a teljes hozzászólást!
  • Remélem csabi881, hogy a sok halmazelméleti okfejtés közepette meglátod: a problémádra van kész metódus.
    System.Linq.Enumerable.Union
    És az úgy működik, ahogy kell.
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd