Quel est le moyen le plus idiomatique de convertir un ensemble d'entiers en un ensemble de gammes? p>
E.g. Compte tenu de l'ensemble {0, 1, 2, 3, 4, 7, 8, 9, 11} Je veux obtenir {{0,4}, {7,9}, {11,11}} en utilisant c # p >
Cette question est déjà répondu dans C ++ @ Solution en C ++ p>
3 Réponses :
Cela devrait être une translittération assez simple du poste que vous avez mentionné. Assurez-vous de mettre ce code dans une classe quelque part où le code C # doit être dans une classe. Je suppose que vous n'êtes pas très familier avec C #, alors je ferai suffisamment pour montrer les similitudes et les différences, et j'espère que vous pourrez gérer le reste.
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))"
}
Ce n'est pas très efficace, mais est em> idiomatic: plus efficace, en supposant qu'il soit trié: p>
(x, y) => tuple.create (x, y) code> peut être court-circuité sur tuplle.create code>.
Essayez K-olth regroupement pour obtenir les gammes. Vous devrez spécifier le nombre de plages différentes que vous souhaitez. P>
-1: k-moyens pour cela? Ne fonctionnera même pas. Les gammes sont ici en nombre de consécutifs.
@Loic - Le message ne dis pas que les gammes doivent inclure des nombres consécutifs. J'ai même posé la question.
Les gammes doivent-elles être contiguës?