Avatar billede juks Novice
12. april 2013 - 14:25 Der er 8 kommentarer og
1 løsning

hvordan splitter man en liste i 3 udfra index som i array[i]

Hej jeg har prøvet mig frem og kan ikke finde den rigtige løsning er ikke vant til at arbjede med lister så er lidt på bar bund.


Jeg har en generisk liste hvor jeg skal loope igennem I,J men den gør ikke som jeg vil , ville gerne have
deltur1 = index[0] til index[i],
deltur2 = index[i+1] til index[j}
deltur3 = index[j+1} til rest]


men min løsning virker ikke
--------------
List<RuteLister> InitTur


for (int i = 1; i < TourListe.Count(); i++)

        for (int j = i ; j < (TourListe.Count()); j++)
                        {
List<RuteLister> deltur1 = InitTur.Take(i).Select(x => x).ToList(); ;
List<RuteLister> deltur2 = InitTur.Skip(i).Take(j-1).Select(x => x).ToList();
List<RuteLister> deltur3 = InitTur.Skip(j).Take(InitTur.Count()).Select(x => x).ToList();


InitTur = deltur1.Concat(deltur2).Concat(deltur3).ToList();
Avatar billede arne_v Ekspert
12. april 2013 - 15:00 #1
List<> har en GetRange metode som maa vaere perfekt til dit formaal.
Avatar billede juks Novice
12. april 2013 - 15:29 #2
Men det er jo en dimmensionelt.

liste består af [1,2,3,4,5,6,7]

så jeg skal jo have (i,j)= 1,2

list1 = 1
list2 = 2,3
list3 =4,5,6,7
Avatar billede arne_v Ekspert
12. april 2013 - 15:36 #3
List<int> original = new List<int> { 1, 2, 3, 4, 5, 6, 7 };
List<int> list1 = original.GetRange(0, 1);
List<int> list2 = original.GetRange(1, 2);
List<int> list3 = original.GetRange(3, 4);

?
Avatar billede arne_v Ekspert
12. april 2013 - 15:36 #4
Eller har du en List<List<int>> ?
Avatar billede juks Novice
13. april 2013 - 06:22 #5
Nej men problemet var at jeg prøver at lave en 2-opt (http://en.wikipedia.org/wiki/2-opt) og der er problemet at den skal se min liste som en "løkke" dvs den skal gå hele vejen rundt, og hvis jeg "bare" skrev fra i til j  så på et tidspunkt rammen den jo bound derfor kunne jeg ikke se mig ud af det, men jeg tror jeg har fundet en god løsning ?



List<RuteLister> deltur1 = InitTur.GetRange(0, i).ToList();
List<RuteLister> deltur2 = InitTur.GetRange(deltur1.Count, j-deltur1.Count).ToList();
int indexS = deltur1.Count() + deltur2.Count();
List<RuteLister> deltur3 = InitTur.GetRange(indexS,InitTur.Count-indexS).ToList();
Avatar billede arne_v Ekspert
14. april 2013 - 00:31 #6
Det kan jeg ikke vurdere, men virker det saa er det jo godt.

Du boer droppe de .ToList() metoder da GetRange returnerer en List<> ikke en IEnumerable<>.
Avatar billede juks Novice
16. april 2013 - 05:14 #7
jeg dropper dem :-) og takker for hjælpen smider du et svar?
Avatar billede arne_v Ekspert
16. april 2013 - 14:40 #8
svar
Avatar billede arne_v Ekspert
30. juli 2013 - 05:12 #9
saa mangler du bare at acceptere
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester