사용 this answer은 약간 변경 :
가 매개 변수로 minCount
받아 dtb '의 GroupAdjacentBy
의 수정 된 버전 사용
public static IEnumerable<IEnumerable<T>> GroupAdjacentBy<T>(
this IEnumerable<T> source, Func<T, T, bool> predicate, int minCount)
{
using (var e = source.GetEnumerator())
{
if (e.MoveNext())
{
var list = new List<T> { e.Current };
var pred = e.Current;
while (e.MoveNext())
{
// if adjacent, add to list
if (predicate(pred, e.Current))
{
list.Add(e.Current);
}
else
{
// otherwise return previous elements:
// if less than minCount elements,
// return each element separately
if (list.Count < minCount)
{
foreach (var i in list)
yield return new List<T> { i };
}
else
{
// otherwise return entire group
yield return list;
}
// create next group
list = new List<T> { e.Current };
}
pred = e.Current;
}
yield return list;
}
}
}
을 또한 주 전환에 그룹에 GroupAdjacentBy
에 대한 기준을 변경 :
// week starts with Monday, so this should
// represent: Wed, Fri, Sat, Sun, Mon
int[] array = new int[] { 1, 2, 4, 5, 6, 0 };
Func<int, int, bool> adjacentCriteria = (x, y) => (x+1==y) || (x==6 && y==0);
string result = string.Join(", ", array
.GroupAdjacentBy(adjacentCriteria, 3)
.Select(g => new int[] { g.First(), g.Last() }.Distinct())
.Select(g => string.Join("-", g)));
Console.WriteLine(result); // output: 1, 2, 4-0
사용자의 선택은 어떻게 표현됩니까? 하루 색인 배열? – Groo
나는 이해하지 못합니다 - 가장 긴 연속 그룹을 원하지만 Mon, Tue, Wed, Sat => Mon-Wed는 가장 긴 그룹입니다. 왜 토가 포함되어 있습니까? Sun, Tue, Thu, Fri, Sat가 있다면 출력은 무엇입니까? – Lester
[LINQ를 사용하여 간격이없는 숫자의 시퀀스를 그룹화] (http://stackoverflow.com/questions/4681949/use-linq-to-group-a-sequence-of-numbers-with-no- 갭). – Groo