Y a-t-il un compact, intégré façon de générer une gamme de flotteurs de min
à max
avec un donné step
?Syntaxe LINQ compacte pour les plages flottantes?
E.g .: plage (10, 20, 0.1) [mais intégrée].
Y a-t-il un compact, intégré façon de générer une gamme de flotteurs de min
à max
avec un donné step
?Syntaxe LINQ compacte pour les plages flottantes?
E.g .: plage (10, 20, 0.1) [mais intégrée].
Vous pouvez faire
Enumerable.Range(100, 100).Select(i => i/10F)
Mais ce n'est pas très descriptif.
Nice en fait. Bref, ça marche et c'est intégré. – Mau
Non, il n'y a rien de intégré. Il serait très facile d'écrire votre méthode statique. Quelque chose comme:
public static IEnumerable<float> FloatRange(float min, float max, float step)
{
for (float value = min; value <= max; value += step)
{
yield return value;
}
}
EDIT: Une alternative en utilisant la multiplication, comme suggéré dans les commentaires:
public static IEnumerable<float> FloatRange(float min, float max, float step)
{
for (int i = 0; i < int.MaxValue; i++)
{
float value = min + step * i;
if (value > max)
{
break;
}
yield return value;
}
}
En MiscUtil j'ai un code de gamme qui fait des trucs géniaux grâce à des trucs de l'opérateur générique de Marc Gravell, vous permettant :
foreach (float x in 10f.To(20f).Step(0.1f))
{
...
}
Merci Jon. Juste curieux d'une version intégrée. :-) – Mau
Ne pas utiliser d'addition, utiliser la multiplication pour une meilleure précision. – liori
Si vous voulez vous assurer que vous allez frapper 'max' dans la gamme, vous aurez besoin d'une comparaison approximative de' max' dans la boucle for au lieu de simplement '<='. Les ajouts répétés pourraient vous faire finir légèrement plus haut que la valeur 'max' donnée. Alternativement, vous pouvez incrémenter jusqu'à ce que vous ayez une longueur inférieure à la valeur max et 'yield return max;' à la fin. –
Comment envisagez-vous cela, ou comment cela se rapporte-t-il à LINQ? – Nix