Esta debe ser una transliteración bastante sencilla de la publicación que mencionas. Asegúrate de poner este código en una clase en alguna parte, el código C# tiene que estar en una clase. Asumo que no estás muy familiarizado con C#, así que haré lo suficiente para mostrar las similitudes y diferencias, y espero que puedas encargarte del resto.
struct Range
{
public Range (int start, int end) { this.start = start; this.end = end; }
public int start;
public int end;
}
public static void SetToRanges(Dictionary<int,bool> indices, List<Range> ranges)
{
Range r = new Range(int.MinValue, int.MaxValue);
foreach (int i in indices.Keys)
{
// translate rest of code here
}
ranges.Add(r);
return ranges;
}
Para una soluiton más idiomática, volvería un IEnumerable<Range>
, por lo que la "lista" se puede construir y reiteró al mismo tiempo:
public static IEnumerable<Range> SetToRanges(Dictionary<int, bool> indices)
{
// instead of "ranges.Add(r)", use "yield return r".
// This returns multiple values in order from the function, that can
// be iterated with "foreach (Range i in SetToRanges(foo))"
}
¿Los rangos deben ser contiguos? – Ivan