[c#]2 arrays samenvoegen

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • MarcelF
  • Registratie: Augustus 2008
  • Laatst online: 07-08 11:15
Ik probeer 2 arrays random te combineren
Want ik ben een map generator aan het maken voor een spel.
Daar heb ik maps en gametypes

De aantal maps kunnen worden geselecteerd en daarbij moeten dan evenveel gametypes worden geselecteerd

Even een simpel voorbeeltje:
C#:
1
2
3
4
5
6
7
8
9
10
    
public void array()
    {
        string[] array1;
        string[] array2;

        array1 = new string[] { "1", "2", "3", "4"};
        array2 = new string[] { "a", "b", "c", "d"};
        
    }


Wat er dan gegenereerd moet worden is dan zoiets als:
C#:
1
      array3 = new string[] { "2d", "1c", "4a", "3b" };


Alleen het combineren lukt me niet.
En kan ik ook nergens vinden

Wat ik wel heb gevonden is dat de arrays bij elkaar worden gevoegd
zoals:
C#:
1
       array3 = new string[] { "1", "2", "3", "4", "a", "b", "c", "d" };

Maar hier heb ik niet veel aan omdat de gametypes bij de maps moeten worden gevoerd.

Ik vroeg me af of hier een functie ofzoiets voor is om de arrays te "combineren"?
Op google kon ik alleen bovenstaande voorbeeld vinden, maar niet het gene wat ik zocht

Het mag natuurlijk ook dat 2 lists ofzoiets worden samengevoegd.
Het hoeft niet specifiek een array te zijn, maar daar leek het mij het makkelijkste mee.

Het zal je maar gebeuren...


Acties:
  • 0 Henk 'm!

  • remco_k
  • Registratie: April 2002
  • Laatst online: 15:38

remco_k

een cassettebandje was genoeg

Wat is er mis met zelf een functie maken die door array1 en 2 itereerd en array3 genereerd zoals je wilt?
Dat zou geen rocket science moeten zijn.

Alles kan stuk.


Acties:
  • 0 Henk 'm!

  • user109731
  • Registratie: Maart 2004
  • Niet online
Gewoon 1 van de arrays 'shufflen' (random door elkaar gooien) en dan met een loop erdoor lopen waarbij je een element uit de andere array erachter plakt?

edit: spuit 2..

[ Voor 5% gewijzigd door user109731 op 27-05-2009 15:32 ]


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Je moet ook niet verwachten dat er voor elk wissewasje een functie/methode is :X Met een paar regels code, die je dus zelf zult moeten schrijven, moet je hier prima zelf iets op kunnen verzinnen i.p.v. een Join() aanroepen ;)

Het helpt al als je voor jezelf uit schrijft hoe je zoiets wil gaan bereiken en dan de deelproblemen stuk voor stuk oplost.

code:
1
2
3
4
Verwijder random element uit arrayA
Verwijder random element uit arrayB
Stop verwijderde elementen samen in 1 element in arrayC
Herhaal tot arrayA en/of arrayB leeg is


Voila.

[ Voor 43% gewijzigd door RobIII op 27-05-2009 15:35 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • MarcelF
  • Registratie: Augustus 2008
  • Laatst online: 07-08 11:15
Ben nog niet zo heel lang bezig met programmeren, en dit is de eerste keer dat ik met arrays werk

Denk dat het wel moet lukken.
Kwam er gewoon ff niet uit. maar denk dat het wel moet lukken als ik ze achter elkaar plak per item met een lusje :)

Tnx voor de ideetjes

Het zal je maar gebeuren...


Acties:
  • 0 Henk 'm!

  • Precision
  • Registratie: November 2006
  • Laatst online: 12-08 21:08
We hebben het toch over arrays, die hebben toch een fixed size?
Edit:
Ik heb nog een paar vraagjes:
Hebben de 2 arrays een gelijke grootte?
Is het zoals bij een spel kaarten, je hebt 4 soorten en 13 waardes, je loopt door de 4 soorten en hangt daar de 13 waardes aan en dan shuffle je een kaart.

Ik raad je aan om met list oid te gaan werken, je kunt daar elementen verwijderen,
code:
1
list1.Remove(index)

En hiermee krijg je een random waarde
code:
1
2
Random r = new Random();
r.next(0, list1.Count());


Eerst random stuk uitvoeren, de nieuwe list vullen en dan de oude waardes verwijderen met remove

[ Voor 81% gewijzigd door Precision op 27-05-2009 20:35 ]

Crisis? Koop slim op Dagoffer - Op zoek naar een tof cadeau?


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
flanderssoft schreef op woensdag 27 mei 2009 @ 20:16:
We hebben het toch over arrays, die hebben toch een fixed size?
En? Dus...? Lijkt me een implementatiedetail ;)

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • Precision
  • Registratie: November 2006
  • Laatst online: 12-08 21:08
RobIII schreef op woensdag 27 mei 2009 @ 20:31:
[...]

En? Dus...? Lijkt me een implementatiedetail ;)
Verwijder random element uit arrayA
Verwijder random element uit arrayB
Doordat een array een fixed size heeft kun je toch niet zo maar een element verwijderen?
Dit is toch een nadeel van zijn gekozen datastructuur, het was een soort van voorzet omdat ik het niet 100% zeker ben. Ik had verwacht dat er iemand de tip ging geven om list te gebruiken oid.

[ Voor 27% gewijzigd door Precision op 27-05-2009 20:39 ]

Crisis? Koop slim op Dagoffer - Op zoek naar een tof cadeau?


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
flanderssoft schreef op woensdag 27 mei 2009 @ 20:37:
Doordat een array een fixed size heeft kun je toch niet zo maar een element verwijderen?
Daarom is het ook pseudo code; de daadwerkelijke implementatie kan verschillen ;)
flanderssoft schreef op woensdag 27 mei 2009 @ 20:37:
Dit is toch een nadeel van zijn gekozen datastructuur, het was een soort van voorzet omdat ik het niet 100% zeker ben. Het was een soort van voorzet en ik had verwacht dat er iemand de tip ging geven om list te gebruiken oid.
C#:
1
List<string>MyListA = new List<string>(myArrayA);

Poehee. Dat was de hele implementatie. Problem solved. :Y) Zo'n nadeel was de gekozen datastructuur nou ook weer niet. Als je die array verder niet gebruikt is een list to-begin-with wel zo handig, maar anders is bovenstaand stukje code natuurlijk niet echt de moeite van het voorkauwen waard ;)
flanderssoft schreef op woensdag 27 mei 2009 @ 20:16:

En hiermee krijg je een random waarde
code:
1
2
Random r = new Random();
r.next(0, list1.Count());
Nee, daarmee krijg je een foutmelding ;) Count is een property, geen method :Y) En dan nog krijg je een random integer terug en niet een random waarde uit de list (maar true, dat beweer je ook niet ;) )

Punt is: we zijn hier niet om code voor te kauwen maar om mensen een duwtje in de juiste richting te geven.
Give a man a fish and feed him for a day. Teach a man how to fish and feed him for a lifetime
Ik had dus graag gezien dat 'ie zelf ontdekte dat een list handig(er) zou zijn ;) en dat "verwijder random element uit arrayA" niet té letterlijk genomen moet worden :+

[ Voor 40% gewijzigd door RobIII op 27-05-2009 20:50 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 03:42

.oisyn

Moderator Devschuur®

Demotivational Speaker

flanderssoft schreef op woensdag 27 mei 2009 @ 20:37:
Doordat een array een fixed size heeft kun je toch niet zo maar een element verwijderen?
Hoe denk je dat een typische ArrayList of Vector klasse dan geïmplementeerd is? Toch echt met een array. Dus blijkbaar kun je wel elementen uit een array verwijderen - namelijk door niet array.length aan te houden als de lengte van de array maar een aparte variabele :). Het verwijderen van een element zou je dan kunnen implementeren door het element te verwisselen met het achterste element, en dan de variabele dat het aantal elementen representeert met 1 te verlagen.

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • Precision
  • Registratie: November 2006
  • Laatst online: 12-08 21:08
RobIII schreef op woensdag 27 mei 2009 @ 20:41:
[...]

Daarom is het ook pseudo code; de daadwerkelijke implementatie kan verschillen ;)


[...]


C#:
1
List<string>MyListA = new List<string>(myArrayA);

Poehee. Dat was de hele implementatie. Problem solved. :Y) Zo'n nadeel was de gekozen datastructuur nou ook weer niet. Als je die array verder niet gebruikt is een list to-begin-with wel zo handig, maar anders is bovenstaand stukje code natuurlijk niet echt de moeite van het voorkauwen waard ;)

[...]

Nee, daarmee krijg je een foutmelding ;) Count is een property, geen method :Y) En dan nog krijg je een random integer terug en niet een random waarde uit de list (maar true, dat beweer je ook niet ;) )

Punt is: we zijn hier niet om code voor te kauwen maar om mensen een duwtje in de juiste richting te geven.


[...]

Ik had dus graag gezien dat 'ie zelf ontdekte dat een list handig(er) zou zijn ;) en dat "verwijder random element uit arrayA" niet té letterlijk genomen moet worden :+
Het is dan bij een array dat je count als method kan gebruiken :9
Tuurlijk heb je 100% gelijk, maar het begon eigenlijk allemaal als een soort van vraag :)

Crisis? Koop slim op Dagoffer - Op zoek naar een tof cadeau?


Acties:
  • 0 Henk 'm!

  • Precision
  • Registratie: November 2006
  • Laatst online: 12-08 21:08
.oisyn schreef op woensdag 27 mei 2009 @ 23:02:
[...]

Hoe denk je dat een typische ArrayList of Vector klasse dan geïmplementeerd is? Toch echt met een array. Dus blijkbaar kun je wel elementen uit een array verwijderen - namelijk door niet array.length aan te houden als de lengte van de array maar een aparte variabele :). Het verwijderen van een element zou je dan kunnen implementeren door het element te verwisselen met het achterste element, en dan de variabele dat het aantal elementen representeert met 1 te verlagen.
Ik doelde dat je niet zoiets als remove() kunt gebruiken maar dat je zelf een functie moet schrijven

Crisis? Koop slim op Dagoffer - Op zoek naar een tof cadeau?


Acties:
  • 0 Henk 'm!

  • Matis
  • Registratie: Januari 2007
  • Laatst online: 10:43

Matis

Rubber Rocket

Is het niet gewoon het makkelijkste als je beide arrays shuffled. En dan van voor naar achter de gegevens eruit leest!

Er is op het wereld wijde web genoeg te vinden over [google=c# shuffle array]

If money talks then I'm a mime
If time is money then I'm out of time


Acties:
  • 0 Henk 'm!

  • remco_k
  • Registratie: April 2002
  • Laatst online: 15:38

remco_k

een cassettebandje was genoeg

flanderssoft schreef op woensdag 27 mei 2009 @ 23:27:
[...]

Ik doelde dat je niet zoiets als remove() kunt gebruiken maar dat je zelf een functie moet schrijven
Dat is waar software schrijven om draait. Niet alles is kant en klaar voor gebruik. Het is iets meer dan legosteentjes in elkaar prikken. :)
Soms moet je zelf zo'n steentje fabriceren, en de manier waarop, mag je zelf kiezen.
Om eens een mooi spreekwoord aan te halen:
Alle wegen leiden naar Rome.
Je moet alleen even de beste en bij voorkeur de korste weg zien te vinden.
Matis schreef op donderdag 28 mei 2009 @ 07:45:
Is het niet gewoon het makkelijkste als je beide arrays shuffled. En dan van voor naar achter de gegevens eruit leest!
Dejavu!
remco_k in "\[c#]2 arrays samenvoegen"
en JanDM in "\[c#]2 arrays samenvoegen"

[ Voor 3% gewijzigd door remco_k op 28-05-2009 10:46 ]

Alles kan stuk.


Acties:
  • 0 Henk 'm!

  • roy-t
  • Registratie: Oktober 2004
  • Laatst online: 19-09 10:19
Waar gaat de hele discussie van verwijderen eigenlijk over, dat is toch pseudo, normaal gebruik je een for loop nadat array a geshuffeld is loop je er met een for loop door heen om c[i] = a[i]+b[i] te doen, i ophogen verwijdert als het ware de items uit het array (of nouja je verwijdert niets en loopt er gewoon door heen punt wat je nodig hebt is dat je niet meer aan de vorige zit).

Anyway volgens mij staat alle code nu echt bijna 100% voorgekauwd dus zal ik even iets anders opgooien, het gaat om een spelletje zei je en elke map kun je een gametype bij selecteren, is het niet handiger om de gebruiker 2 lijsten te tonen, of 2 schermen en dan eerst de gametype en daarna de map te laten kiezen, alles laten zien met "de_dust : hostage, de_dust: defuse, de_dust: ffa" lijkt me wat onoverzichtelijker.

~ Mijn prog blog!


Acties:
  • 0 Henk 'm!

  • Precision
  • Registratie: November 2006
  • Laatst online: 12-08 21:08
Dat is waar software schrijven om draait. Niet alles is kant en klaar voor gebruik. Het is iets meer dan legosteentjes in elkaar prikken. :)
Maar waarom dan het wiel 2 maal uitvinden?
Want hier kan het wel kant en klaar, je hoeft het enkel nog 4 minuutjes in de magnetron te stoppen en klaar :+

Crisis? Koop slim op Dagoffer - Op zoek naar een tof cadeau?


Acties:
  • 0 Henk 'm!

  • remco_k
  • Registratie: April 2002
  • Laatst online: 15:38

remco_k

een cassettebandje was genoeg

flanderssoft schreef op donderdag 28 mei 2009 @ 11:57:
[...]

Maar waarom dan het wiel 2 maal uitvinden?
Want hier kan het wel kant en klaar, je hoeft het enkel nog 4 minuutjes in de magnetron te stoppen en klaar :+
2 Arrays shuffelen en in een 3e samenvoegen zou ik gewoon simpel werk willen noemen. Niet bepaald het wiel uitvinden. :P

Alles kan stuk.


Acties:
  • 0 Henk 'm!

  • user109731
  • Registratie: Maart 2004
  • Niet online
Als het gaat om willekeurige elementen 'koppelen' hoef je maar één array te shufflen.
Nog simpeler :p

[ Voor 8% gewijzigd door user109731 op 28-05-2009 13:15 ]


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 03:42

.oisyn

Moderator Devschuur®

Demotivational Speaker

roy-t schreef op donderdag 28 mei 2009 @ 11:38:
het gaat om een spelletje zei je en elke map kun je een gametype bij selecteren, is het niet handiger om de gebruiker 2 lijsten te tonen, of 2 schermen en dan eerst de gametype en daarna de map te laten kiezen
Als dat het geval is, waarom wilt hij dan de twee arrays random aan elkaar koppelen waarbij elk element maar 1x voorkomt, ipv alle permutaties van elk mogelijke combinatie?

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.

Pagina: 1