9
votes

Générer une séquence avec une valeur de pas

J'ai des entrées suivantes: xxx pré>

Je veux générer une séquence de double réseau avec Zmin et Zmax comme dernière valeur. Mais de la deuxième valeur jusqu'à la fin durer, il devrait être Steð · Ped par (Zmax-Zmin) / Count. P>

Exemple: P>

double[] result = Enumerable.Repeat(zmin, N).Select(iv => (iv +(zmax-zmin)/count)).ToArray();


1 commentaires

Ce n'est pas une description d'erreur ...


4 Réponses :


12
votes
public static IEnumerable<double> Range(double min, double max, double step)
{
    double i;
    for (i=min; i<=max; i+=step)
        yield return i;

    if (i != max+step) // added only because you want max to be returned as last item
        yield return max; 
}

1 commentaires

Utilisation des échantillons ?



1
votes

Celui-ci est bon non seulement pour les nombres, mais pour des types plus complexes comme date / heure.

La deuxième méthode permet de fournir un sélecteur de résultat - utile dans certains cas. P>

January 
February 
March 
April 
May 
June 
July 
August 
September 
October 
November 
December 
January


0 commentaires

1
votes

Ceci est une amélioration de Répondre de Muhammad Hasan Khan . La solution fonctionne bien, mais comme l'erreur décimale s'accumule au fil du temps, elle produit beaucoup d'erreur dans les décimales au fil du temps.

La première amélioration de la solution existante consiste à vous éloigner de l'accumulation d'erreurs,

double[] Myarray = classname.Range(0, 50, 0.01).ToArray();


1 commentaires

Une autre façon est de jeter un coup d'œil à Numsharp. Mais si c'est le seul but de votre base de code pour Numsharp, il n'a pas de sens de porter autour d'une autre DLL ou d'un exe gonflé.



0
votes

Un peu plus propre que les réponses existantes (à partir du 2020-01-22): xxx

Ceci utilise la multiplication au lieu de l'addition répétée, de sorte que les erreurs d'arrondi soient évitées. < / p>


0 commentaires