Tråd för nuvarande och framtida frågor i Visual Studio 2017

Permalänk
Medlem
Skrivet av RobinJacobsson:

Verkar inte vara alltför het tråd, vore tacksam om någon kunde hjälpa!

Jag har försökt hitta ett annat sätt att lösa mitt problem, och jag undrar:

Hur tar jag reda på hur många av mina arrays element som har blivit tilldelade ett värde?
Testade med array.Length och Count men det visade bara hur många element jag tilldelat min array.
Jag har löst det genom en for-loop, men det måste väl finnas en bättre lösning?

Och så undrar jag, hur tilldelar jag en jagged array värden i en loop från variabler?

int[][] utfall = new int[18][]; for(villkor) { utfall[antal] = new int[5]; utfall[antal][a] = 1; }

Du får nesta loops för det, en som loopar index i huvudarrayen och en som loopar arrayerna den håller i.

// Loopa din jagged array. for (int i = 0; i < arr.Length; i++) { // Skapa upp en ny array på index i, ge den längd. arr[i] = new int[4]; for (int j = 0; j < arr[i].Length; j++) { // Sätt värden i den nya arrayen. arr[i][j] = värde } }

Med tilldelade värde, menar du att resterande är null innan de fått värden eller är det ints så värden är 0?
Om du inte orkar hålla på med for-loops så skulle du kunna använda LINQ.
Nu gör jag detta direkt här i forumet, så har inte testat det. Men bör fungera, annars får jag skapa upp ett test projekt, sjukt länge sen jag rörde någon multidimensionell array

I detta exempel utgår jag från att du har en array med ints och där tomma värden är 0.

var nonEmptyElements = (from a in array from inner_a in a where inner_a != 0 // (alternativ != null) select inner_a).Count();

Permalänk
Medlem

Lyckas inte med Linq, kan du anpassa koden efter min array?

ans_pref[1] = new int[5]; ans_pref[2] = new int[5]; ans_pref[1] = new int[] { 0, 1, 1, 0, 1 }; //0 och 1 är kompatibiliteten mot olika avdelningar ans_pref[2] = new int[] { 0, 1, 1, 0, 1 };

Jag vill kolla hur många av ans_pref[person][avdelning] som har 1 och är kompatibla mot den avdelning som är aktuell i loopen.

Permalänk
Medlem
Skrivet av RobinJacobsson:

Lyckas inte med Linq, kan du anpassa koden efter min array?

ans_pref[1] = new int[5]; ans_pref[2] = new int[5]; ans_pref[1] = new int[] { 0, 1, 1, 0, 1 }; //0 och 1 är kompatibiliteten mot olika avdelningar ans_pref[2] = new int[] { 0, 1, 1, 0, 1 };

Jag vill kolla hur många av ans_pref[person][avdelning] som har 1 och är kompatibla mot den avdelning som är aktuell i loopen.

Vet inte om jag riktigt hänger med i hur du menar. Du vill mata in t.ex. ans_pref[1] och vill se hur många som är 1 och 0 i den arrayen?

För att använda Linq får du lägga till using System.Linq;
I filen du arbetar med.

var arr = new int[5][] { new int[5] { 0, 1, 1, 0, 1 }, new int[5] { 1, 2, 3, 0, 1 }, // Index 1 new int[5] { 0, 1, 1, 0, 1 }, new int[5] { 0, 1, 1, 0, 1 }, new int[5] { 0, 1, 1, 0, 1 } }; // Query mot Index 1 var query = (from a in arr[1] where a == 1 || a == 0 select a).Count(); // Result: 3

Någon anledning till varför du jobbar med jagged arrays med siffror istället för att arbeta med object t.ex. en class för Arbetare där arbetare har en ID för kompatibilitet som matchar ID för någon/några avdelningar och en class för Avdelning, som i sin tur har sina kompatibla kontroller mot typen på Arbetare?

Permalänk
Medlem

Nej, jag är helt ny med programmeringen.

Istället för att göra mig beroende av MySql så hittade jag jagged arrays och tänkte att jag kunde lagra och hämta data från den istället.

Jag bråkar fortfarande med att lösa mitt problem. Jag har flera avdelningar som rymmer olika antal medarbetare, och alla kan inte vara på alla avdelningar av olika anledningar. En av dom är att man har varit där under gårdagen och således sätter jag 0 som preferens för den arbetaren på den avdelningen dagen efter.

Så just nu har jag skapat en loop(1) som går igenom antal avdelningar, och i den loopar(2) jag alla personer som är kompatibla för den avdelningen. Jag tänkte gå vidare genom att i loop(2) skapa en loop som listar alla personer i aktuell avdelning men som != den aktuella personen. Detta görs så många gånger det finns platser för anställda på den aktuella avdelningen. Och sedan fortsätta beroende på hur många personer avdelningen rymmer. På så vis har jag skapat en kombination för en avdelning. Och sedan göra en jagged array som håller [kombinationer][poäng].

Men jag vet inte om jag tänker rätt. Väntar fortfarande på svar från någon som känner att dom bemästrar detta ämne!

Permalänk
Medlem
Skrivet av RobinJacobsson:

Nej, jag är helt ny med programmeringen.

Istället för att göra mig beroende av MySql så hittade jag jagged arrays och tänkte att jag kunde lagra och hämta data från den istället.

Jag bråkar fortfarande med att lösa mitt problem. Jag har flera avdelningar som rymmer olika antal medarbetare, och alla kan inte vara på alla avdelningar av olika anledningar. En av dom är att man har varit där under gårdagen och således sätter jag 0 som preferens för den arbetaren på den avdelningen dagen efter.

Så just nu har jag skapat en loop(1) som går igenom antal avdelningar, och i den loopar(2) jag alla personer som är kompatibla för den avdelningen. Jag tänkte gå vidare genom att i loop(2) skapa en loop som listar alla personer i aktuell avdelning men som != den aktuella personen. Detta görs så många gånger det finns platser för anställda på den aktuella avdelningen. Och sedan fortsätta beroende på hur många personer avdelningen rymmer. På så vis har jag skapat en kombination för en avdelning. Och sedan göra en jagged array som håller [kombinationer][poäng].

Men jag vet inte om jag tänker rätt. Väntar fortfarande på svar från någon som känner att dom bemästrar detta ämne!

Låter som ett väldigt komplext tillvägagångssätt då du är ny med programmering. Vanligast är att man arbetar med objekt.
Du skulle exempelvis kunna ha en List av Avdelningar där varje Avdelning i sin tur har en List av Arbetare.
Sen på dina Arbetare kan du sätta en property för NuvarandeAvdelning och SenasteArbetadeAvdelning.

Sedan i ditt main program har du en List av Avdelningar (representerar databasen) som du arbetar med.
Det som underlättar med detta är att varje Arbetare har ett eget unikt ID och att varje avdelning ansvar för sin egen lista med nuvarande Arbetare och varje enskild arbetare har koll på vart de arbetar och vilken avdelning de senast var på.
Mycket enklare än att bara skriva massa ettor och nollor i jagged arrays.

Fortfarande väldigt förvirrad av din kod och vad du vill ska ske, kan du citera den delen av koden som du undrar över och vad det är du vill få ut counten av?

Permalänk
Medlem

Jag kan inte riktigt se hur jag ska skapa alla kombinationer. Hade det varit tex 2 avdelningar och 2 personer på varje så hade det ju varit mycket lättare. Nu har jag avdelningar vars antal beror på hur många användaren lägger in. Samma med antal medarbetare, det ska man kunna redigera senare i MYSQL. Och varje avdelning har/kan ha olika antal medarbetare. Hade det varit 2 avd och 4 anställda så hade man ju kunnat få ut alla kombinationer genom 2 loopar, genom att loopa avd och medarbetarna.

Skickades från m.sweclockers.com

Permalänk
Medlem

Här kommer en uppdatering!

Jag har fått igång koden och den verkar fungera helt okej!

Algoritmen kollar vilken medarbetare som har lägst antal möjliga kompatibla avdelningar, bland annat genom att ta hänsyn till vart man var under gårdagen, och börjar med att slumpa ut dessa och fortsätter så i den ordningen. Om den inte klarar av detta på ett visst antal försök så startar den om placeringen igen. Jag har dock inte hittat ett bra sätt att avgöra om loopen förväntas gå oändligt, eller om alla inte är placerbara. Men för att vara ett verktyg så fungerar det helt okej om man vet hur man ska använda det. Jag arbetar för ett stort företag, och om jag lyckas optimera koden lite och göra den mer användarvänlig så verkar det som att jag kanske kan sälja in det enligt cheferna, vore häftigt Men då behövs det expertishjälp!