Forums Neueste Beiträge
 

Wie Anzahl der Variablen variabel definieren und Werte zuweisen?

21/07/2009 - 09:15 von Hartmut Callies | Report spam
Hallo,
ich benutze folgende Variablendeklaration:

Public Structure Vector
Dim x As Double
Dim y As Double
Dim z As Double
End Structure

Dim vec1 As Vector

Weiterhin habe ich ein Array mit Double-Werten. In diesem sollen die
die Werte (x-Wert vom Punkt1, y-Wert vom Punkt1, x-Wert vom Punkt2,
y-Wert vom Punkt2, ...) den Vektoren zugeordnet werden:

For m As Integer = 0 To dblCoordsLineProduct.GetUpperBound(0) Step 2
vec1.x = dblCoordsLineProduct(m)
vec1.y = dblCoordsLineProduct(m + 1)
Next

Die Anzahl der Wertepaare im Array variiert.
Wie kann ich in Abhàngigkeit von der Anzahl der Array-Werte
(dblCoordsLineProduct.Count)
die Vektoren-Variablen definieren und diesen in der For-Next-Schleife Werte
zuweisen?

z.B.
- dblCoordsLineProduct.Count ist 10
- somit vec1 bis vec5 definieren
- zuweisen in der For-Next-Schleife



Gruß
Hartmut
 

Lesen sie die antworten

#1 Elmar Boye
21/07/2009 - 10:08 | Warnen spam
Hallo Hartmut,

Hartmut Callies schrieb:
ich benutze folgende Variablendeklaration:

Public Structure Vector
Dim x As Double
Dim y As Double
Dim z As Double
End Structure



Die könnte in einem weiteren Schritt verbessert werden.
So sollten x, y, z als Eigenschaften ausgeführt werden.
Und wenn Du Operationen, wie Gleichheit uam. darauf
ausführen willst, wàren Equals, IComparable(Of T) uam. sinnvoll.

WPF kennt mit System.Windows.Media.Media3D.Point3D
eine vergleichbare Struktur.

Weiterhin habe ich ein Array mit Double-Werten.



Du solltest Dich von Arrays verabschieden.
Auflistungen (Collection) sind für eine variable Anzahl
von Werten wesentlich günstiger. Zudem können damit auch
die Möglichkeiten von Linq besser genutzt werden.

Die Anzahl der Wertepaare im Array variiert.
Wie kann ich in Abhàngigkeit von der Anzahl der Array-Werte
(dblCoordsLineProduct.Count)
die Vektoren-Variablen definieren und diesen in der For-Next-Schleife Werte
zuweisen?

z.B.
- dblCoordsLineProduct.Count ist 10
- somit vec1 bis vec5 definieren
- zuweisen in der For-Next-Schleife



Unten eine VectorCollection, die ein zusàtzliches Add implementiert.
um ein Array von Double zu verdauen.
Die Methode TestFromArray ist zur Illustration vorhanden,
um zu zeigen, das schon das weitere Anfügen leichter ist
und die ToString Methoden. um die Inhalte auszugeben.

Und je nachdem, was Du sonst noch so brauchst, kannst Du es
jederzeit in die Klasse einbauen.

Gruß Elmar


Public Structure Vector
' weiterer Konstruktor für x, y, z wàre nett
Public Sub New(ByVal x As Double, ByVal y As Double)
Me.X = x
Me.Y = y
Me.Z = 0.0
End Sub
' Sollten Properties sein
Dim X As Double
Dim Y As Double
Dim Z As Double

Public Overrides Function ToString() As String
Return String.Format("[Vector ({0}, {1}, {2})]", Me.X, Me.Y, Me.Z)
End Function
End Structure

Public Class VectorCollection
Inherits System.Collections.ObjectModel.Collection(Of Vector)

Public Overloads Sub Add(ByVal values As Double())
If values Is Nothing Then
Throw New ArgumentNullException("values")
End If
If values.Length Mod 2 <> 0 Then
Throw New ArgumentOutOfRangeException("values", "Es wurde eine ungerade Anzahl von Werten übergeben.")
End If

For index As Integer = 0 To values.Length - 1 Step 2
Me.Add(New Vector(values(index), values(index + 1)))
Next
End Sub

Public Overrides Function ToString() As String
Dim builder As New System.Text.StringBuilder
builder.AppendLine("VectorCollection")
If Me.Count = 0 Then
builder.AppendLine("Empty")
Else
For Each v As Vector In MyBase.Items
builder.AppendLine(v.ToString())
Next
End If
Return builder.ToString()
End Function

Friend Shared Sub TestFromArray()
Dim v1 As New VectorCollection()

v1.Add(New Double() {1.0, 2.0, 3.0, 4.0, 5.0, 6.0})
Console.WriteLine("v1: {0}", v1)

v1.Add(New Double() {7.0, 8.0})
Console.WriteLine("v2: {0}", v1)

Try
v1.Add(New Double() {9.0})
Catch ex As Exception
Console.WriteLine("Ausnahme (erwartet) " + ex.Message)
End Try

End Sub
End Class

Ähnliche fragen