Я использую C# для создания функции, которая принимает список из NodaTime.IsoDayOfWeek
дней. Я хочу группировать ввод в группы последовательных дней.Группировка списка дней недели по группам дней подряд
Например, следующие списки должны дать следующий вывод:
{ 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 } }
Обратите внимание, что воскресенье и понедельник являются последовательными, так что список является замкнутым контуром. Кроме того, результирующие списки должны быть заказаны таким образом, чтобы первый день непосредственно следовал за днем, который не включен в список ввода (или в понедельник, если включен полный список).
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;
}
Однако я не могу понять, как изменить это группировать дней с воскресенья и понедельника также последовательны. Как я могу группировать последовательные дни, когда воскресенье и понедельник также считаются последовательными?
[Проверьте это] (http://stackoverflow.com/questions/4681949/use-linq-to-group-a-sequence-of-numbers-with-no-gaps) - ответ Loved DTB в - посмотреть, как вы можете адаптировать его к своей потребности –