Virksomheder er på vej fra store sprogmodeller, der svarer på spørgsmål, til AI-agenter, der kan udføre opgaver på egen hånd. Det gør teknologien mere nyttig – og langt mere risikabel.
og det er den eneste måde jeg selv lige kan komme på...!
dvs hvis min kode skulle være lidt mere præcis skrevet ind her, så er der en foreach løkke, I løkken :) og den foreach løkke, den kigger alle undermapperne igennem, og ser om de er i min dB i forvejen.
og de nye elementer skal også være en del af løkken, altså den skal IKKE springe dem over..!
ja.. kunne man godt.. men det ville i principet jo bare betyde at man Copy & paste hele den samme kode til at køre igen.. det er der jo ingen grund til.. ellers skulle man lave den til en metode, og så lade den kører igennem nogle gange.!
jeg må nok hellere være mere præcis
jeg skal lave en directory listing.. den directory listing laver jeg på følgende måde
hmm. tror bare jeg poster noget af selve koden.. undskyld hvis det er noget sjusk at læse
public FileGenerator() { bool NytIDb = false; User u = new User(); string Mappe = u.HomeDir; HentHeleDb(); if (0 < ArrMappe.Count) {
foreach (ArrMappeObj tmpInfo in ArrMappe) { Mappe = new DirectoryInfo(tmpInfo.MappeSti); if (Mappe.LastWriteTime != tmpInfo.LastChange) { NytIDb = true; break; } }
} else { Mappe = new DirectoryInfo(Mappe); DateTime LastChange = new DateTime(); NewMappe(Mappe, LastChange); if (ArrMappe.Count > 0) NytIDb = true; } if (NytIDb == true) { if (ArrMappe.Count > 0) { foreach (ArrMappeObj tmpInfo in ArrMappe) { Mappe = new DirectoryInfo(tmpInfo.MappeSti); if (Mappe1.LastWriteTime != tmpInfo.LastChange) { ArrayList Arrtmp = new ArrayList(); Arrtmp.AddRange(Mappe.GetDirectories()); ArrayList ArrMappetmp = new ArrayList(); ArrMappetmp.AddRange(ArrMappe); foreach (DirectoryInfo DI in Arrtmp) { bool FindesDet = false;
foreach (ArrMappeObj tmpInfo0 in ArrMappetmp) { if (DI.FullName == tmpInfo0.MappeSti) { FindesDet = true; break; } } if (FindesDet == false) { NewMappe(DI.FullName, (new DateTime())); }
} } } } } }
jeg har ændret nogle af streng navnene, men ellers er det koden i træk.
det den skal gøre. i starten er der ikke noget i DB, dvs der skal den tage det dir jeg har bedt den om derefter går den ind og ser efter undermapper i den mappe, de undermapper skal så tilfæjes array, og kigges igennem (hvor problemet jo er med foreach løkken)
den kode du har givet.. (jeg har ingen erfaring af hvad jeg ved af, om rekursivitet) men koden du har givet.. den vil vel bare køre i en konstant lykke..? vil den nogensinde bryde..?
men overvejer lidt om det ikke ville være nemmere at ændre min nuværende kode til en while løsning, frem en "rek.... :) " du har nok bedre styr på det en mig, så har du nogle gode forslag..?
Se på det fra den lyse side - så lærer du også noget om den teknik, og den er vigtig at beherske, hvis man ønsker at drive det til noget seriøst indenfor programmering. :^)
Rekursion bruges bedst når et problem kan deles op i mindre problemer som hver især ligner det oprindelige problem.
Det er den situation du har her: Du har brug for at gennemløbe en liste og "gøre noget". Undervejs putter du så mere i listen og har derfor brug for også at gennemløbe disse og "gøre noget". Dermed kommer der atter mere i listen, og også for disse nye elementer har du brug for at "gøre noget". osv. osv.
Rekusion ligger som regel lige til højrebenet når man har en opgave som kræver at man skal gennemløbe et bibliotek og alle dets underbiblioteker: Først gennemløber man bibliotektet, dernæst gennemløber man dettes underbiblioteker, dernæst gennemløber man deres underbiblioteker, osv:
using System; using System.IO;
namespace e713586c { class Program { static void Main(string[] args) { DirectoryInfo scanDi = new DirectoryInfo(@"C:\Programmer");
VisFiler(scanDi); }
static void VisFiler(DirectoryInfo di) { // Vis alle filerne i dette bibliotek: foreach (FileInfo fi in di.GetFiles()) Console.WriteLine(fi.FullName);
// Vis filerne i dette biblioteks underbiblioteker; foreach (DirectoryInfo subDi in di.GetDirectories()) VisFiler(subDi); } } }
Et andet almindeligt eksempel, som bruger rekursivitet, er beregning af fakultet (10! = 10*9*8*7*6*5*4*3*2*1):
using System;
namespace e713586d { class Program { static void Main(string[] args) { Console.WriteLine("Fakultetet af 10 er: " + Fakultet(10)); }
static int Fakultet(int n) { if (n == 1) return 1; else return n * Fakultet(n - 1); } } }
Dette er i øvrigt et eksempel på at der ikke altid skal returneres void.
PS: Ingen grund til at hæve point på denne her - 100 points er skam nok.
et resume bliver åbenbart hurtigt til et referat..! :)
ej.. det er rigtig lækker info at få smækket i hovedet..!
og jeg kan udmærket godt se at det ihvertfald er denne løsning jeg ledte efter. (bare en skam jeg ikke spurgte FØR jeg selv begav mig ud i det :) ) men smid et svar.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.