C# Nähsten Wert im Array finden

El_Ko

Cadet 4th Year
Registriert
Apr. 2013
Beiträge
114
Hallo allerseits,
ich habe ein kleineres Problem:
Ich habe ein Array mit Kondensatorwerten aus der E12 Reihe welche sich so berechnen:
Code:
            double[] ereihe= new double[12]; //Array für die Werte deklarieren

            for(int i = 0; i<erow.Lenght; i++) 
            {
                double value = Math.Pow(10.0000, i / 12.0000) * 1.2115; //den Wert über die Formel 10^(m/n) berechnen und mit dem Konstanten Faktor multiplizieren
                ereihe[i] = Math.Round(value, 1); //Den Wert noch runden und Speichern (Wert mit 1 Nachkommastelle)
            }
Nun möchte ich einen Berechneten Kondensatorwert mit den Werten abgleichen und dann herausfinden welcher Arraywert der nähste (Nächstgrößere) zu dem Kondensatorwert ist, damit nicht genug, die Kondensatoren, welche ich vorher errechne können von pF (10E-12) bis µF (10E-6) gehen. Könnte mir Jemand etwas weiterhelfen? Ich hänge grade total...
 
Gehste das Array durch, guckste ob der Wert kleiner/gleich als der Wert von dem bestimmten Kondensator ist.
Falls ja, speichere in Variable.
Mache dann weiter, wie in Zeile 1, ersetze, falls Wert in Variable kleiner ist als neuer Wert in der Schleife.
 
wenn ich dich richtig verstanden habe, willst du den nächsthöheren wert im Array. Das geht mit linq, zb so:

Hier Stand Blödsinn, richtig wäre so:

Code:
            double next = ereihe.Max();
            for (int i = 0; i < ereihe.Length; i++) {
                if ((ereihe[i] < next) && (ereihe[i] > value )) {
                    next = ereihe[i];
                }
            }
 
Zuletzt bearbeitet:
Mal so als Anmerkung:
Bedenke, daß die E12 Reihe nicht nach der Formel berechnet werden kann da einige Werte historisch bedingt anders belegt sind.
Bedenke, daß Du den Faktor 1.2115 in der Formel nicht brauchst, wenn Du zum Index i 1 addierst oder i ab 1 laufen läßt.
 
Mit Linq geht es so:

Code:
double[] ereihe = new double[12]; //Array für die Werte deklarieren
 
for(int i = 0; i < ereihe.Length; ++i) {
	double value = Math.Pow(10.0000, i / 12.0000) * 1.2115; //den Wert über die Formel 10^(m/n) berechnen und mit dem Konstanten Faktor multiplizieren
	ereihe[i] = Math.Round(value, 1); //Den Wert noch runden und Speichern (Wert mit 1 Nachkommastelle)
}

double searchedValue = 4.5;
double nextBiggerValue = ereihe.OrderBy(w => w).FirstOrDefault(w => (w - searchedValue) >= 0); // Sortiere ereihe aufsteigend nach den Werten und nehme dann den ersten Wert, wo ereihenWert - gesuchterWert größer 0 ist.

Beachte, dass FirstOrDefault eine 0 zurück gibt, falls es keinen Wert größer als den gesuchten Wert geben sollte. Des Weiteren solltest du beachten, dass es bei double-Werten zu Rundungsfehlern kommen kann.

Mit folgender Abfrage findest du den nächstgelegenen Wert (nach unten und oben).

Code:
double nextBiggerValue = ereihe.OrderBy(w => Math.Abs(w - searchedValue)).FirstOrDefault();
 
Zuletzt bearbeitet:
Zurück
Oben