Ich benutze C#, um eine Funktion zu erstellen, die eine Liste der NodaTime.IsoDayOfWeek
Tage aufnimmt. Ich möchte die Eingabe in Gruppen von aufeinanderfolgenden Tagen gruppieren.Gruppieren einer Liste von Wochentagen in Gruppen von aufeinanderfolgenden Tagen
Zum Beispiel sollten die folgenden Listen geben die folgende Ausgabe:
{ Mon, Tue } => { { Mon, Tue } }
{ Mon, Wed } => { { Mon }, { Wed } }
{ Mon, Tue, Fri, Sat } => { { Mon, Tue }, { Fri, Sat } }
{ Mon, Wed, Fri, Sun } => { { Sun, Mon }, { Wed }, { Fri } }
{ Mon, Tue, Wed, Thu, Fri, Sat, Sun } => { { Mon, Tue, Wed, Thu, Fri, Sat, Sun } }
Beachten Sie, dass Sonntag und Montag aufeinander folgend ist, so dass die Liste eine geschlossene Schleife ist. Zusätzlich sollten die resultierenden Listen so angeordnet werden, dass der erste Tag direkt auf einen Tag folgt, der nicht in der Eingabeliste enthalten ist (oder Montag, wenn die vollständige Liste enthalten ist).
Mauricio Scheffer published a great extension method to group consecutive integers here:
public static IEnumerable<IEnumerable<int>> GroupConsecutive(this IEnumerable<int> list) {
var group = new List<int>();
foreach (var i in list) {
if (group.Count == 0 || i - group[group.Count - 1] <= 1)
group.Add(i);
else {
yield return group;
group = new List<int> {i};
}
}
yield return group;
}
Allerdings kann ich nicht herausfinden, wie diese seit Sonntag und Montag zu einer Gruppe Tagen ändern auch aufeinander folgend sind. Wie kann ich aufeinanderfolgende Tage gruppieren, wobei Sonntag und Montag auch als aufeinanderfolgend gelten?
[Check this] (http://stackoverflow.com/questions/4681949/use-linq-to-group-a-sequence-of-numbers-with-no-gaps) - Loved dtb Antwort - Sehen Sie, wie Sie es an Ihre Bedürfnisse anpassen können –