10. juli 2006 - 15:36
Der er
4 kommentarer og 1 løsning
Samle datoer funktion/rutine
Jeg har nogle datoer i et arraylist: 15-06-2006 16-06-2006 17-06-2006 18-06-2006 21-06-2006 22-06-2006 23-06-2006 25-06-2006 27-06-2006 Hvordan får jeg dem grupperet i klumper? Eks. 15-06-2006 til 18-06-2006, 21-06-2006 til 23-06-2006, 25-06-2006, 27-06-2006
Annonceindlæg fra Computerworld
Geopolitik i cyberspace
Mark Fiedel i Styrelsen for Samfundssikkerhed påpeger behovet for, at Danmark kigger kritisk på leverandørafhængighed.
13. juni 2025
Måske: DateTime begin = new DateTime("15","06","2006"); DateTime end = new DateTime("18","06","2006"); ArrayList myDates = new ArrayList(); foreach(DateTime dt in arrayList) { if(dt>=beginTime && dt<=endTime) { myDates.add(dt); } }
komplet eksempel i .NET 1.x: using System; using System.Collections; namespace E { public class MainClass { public static ArrayList FindInterval(ArrayList total, DateTime start, DateTime end) { ArrayList res = new ArrayList(); foreach(DateTime dt in total) { if(start <= dt && dt <= end) { res.Add(dt); } } return res; } public static ArrayList[] FindGroups(ArrayList total, DateTime start, int ndays) { int span = (int)(((DateTime)total[total.Count-1])-start).TotalDays+1; ArrayList[] res = new ArrayList[(span-1)/ndays+1]; for(int i = 0; i < res.Length; i++) { res[i] = FindInterval(total, start.AddDays(i*ndays), start.AddDays(i*ndays+ndays-1)); } return res; } public static void Main(string[] args) { ArrayList lst = new ArrayList(); lst.Add(DateTime.Parse("15-06-2006")); lst.Add(DateTime.Parse("16-06-2006")); lst.Add(DateTime.Parse("17-06-2006")); lst.Add(DateTime.Parse("18-06-2006")); lst.Add(DateTime.Parse("21-06-2006")); lst.Add(DateTime.Parse("22-06-2006")); lst.Add(DateTime.Parse("23-06-2006")); lst.Add(DateTime.Parse("25-06-2006")); lst.Add(DateTime.Parse("27-06-2006")); ArrayList[] groups = FindGroups(lst, DateTime.Parse("15-06-2006"), 3); foreach(ArrayList g in groups) { foreach(DateTime dt in g) { Console.Write(" " + dt); } Console.WriteLine(); } } } }
men det er meget fixere i .NET 2.0: using System; using System.Collections.Generic; namespace E { public class MainClass { public static List<DateTime>[] FindGroups(List<DateTime> total, DateTime start, int ndays) { int span = (int)((total[total.Count-1])-start).TotalDays+1; List<DateTime>[] res = new List<DateTime>[(span-1)/ndays+1]; for(int i = 0; i < res.Length; i++) { res[i] = total.FindAll(delegate(DateTime dt) { return start.AddDays(i*ndays) <= dt && dt <= start.AddDays(i*ndays+ndays-1); }); } return res; } public static void Main(string[] args) { List<DateTime> lst = new List<DateTime>(); lst.Add(DateTime.Parse("15-06-2006")); lst.Add(DateTime.Parse("16-06-2006")); lst.Add(DateTime.Parse("17-06-2006")); lst.Add(DateTime.Parse("18-06-2006")); lst.Add(DateTime.Parse("21-06-2006")); lst.Add(DateTime.Parse("22-06-2006")); lst.Add(DateTime.Parse("23-06-2006")); lst.Add(DateTime.Parse("25-06-2006")); lst.Add(DateTime.Parse("27-06-2006")); List<DateTime>[] groups = FindGroups(lst, DateTime.Parse("15-06-2006"), 3); foreach(List<DateTime> g in groups) { foreach(DateTime dt in g) { Console.Write(" " + dt); } Console.WriteLine(); } } } }