7
votes

Convertir des ensembles d'entiers en gammes en utilisant c #

Quel est le moyen le plus idiomatique de convertir un ensemble d'entiers en un ensemble de gammes?

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 #

Cette question est déjà répondu dans C ++ @ Solution en C ++


1 commentaires

Les gammes doivent-elles être contiguës?


3 Réponses :


3
votes

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))"
}


0 commentaires

11
votes

Ce n'est pas très efficace, mais est idiomatic: xxx

plus efficace, en supposant qu'il soit trié: xxx


1 commentaires

(x, y) => tuple.create (x, y) peut être court-circuité sur tuplle.create .



0
votes

Essayez K-olth regroupement pour obtenir les gammes. Vous devrez spécifier le nombre de plages différentes que vous souhaitez.


2 commentaires

-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.