如何在vb中分配两个数组中的列表框项?

时间:2015-06-02 05:33:25

标签: arrays vb.net

我正在编写一个程序来读取文本文件中的许多行(逐行),每行包含2个用逗号分隔的数字",",第一部分是纬度,第二部分是经度。我将每一行都存储在一个列表框中。

我有一个列表框,其中每个项目包含两个以逗号分隔的数字(纬度和经度)"," (例如:12,64)。 我想创建两个数组,第一个包含纬度的数组,第二个包含经度。

2 个答案:

答案 0 :(得分:1)

首先,您应该定义适当的数据结构。纬度值通常是数字。所以,Double()似乎是合适的。然后:

Dim lat1(ListBox1.Items.Count - 2) As Double
Dim lat2(ListBox1.Items.Count - 2) As Double
For i As Integer = 0 To ListBox1.Items.Count - 1
    Dim itemString = ListBox1.Items(i)
    Dim splitItemString = itemString.Split(","c)
    'Use Parse only if you're absolutely sure that this works.
    'Use TryParse otherwise
    Dim lat = Double.Parse(splitItemString(0))
    Dim lon = Double.Parse(splitItemString(1))

    'Now we can fill the arrays
    If i < ListBox1.Items.Count - 1 Then lat1(i) = lat
    If i > 0 Then lat2(i - 1) = lat
 Next

但是,仅计算距离几乎不需要两个数组。相反,你应该填充一个数组(甚至可能有一个合理的Struct由纬度和经度值组成)然后:

For i As Integer = 0 To Coordinates.Count - 1
    'Calculate distance between Coordinates(i) and Coordinates(i + 1)
Next

答案 1 :(得分:1)

我不确定我的原始问题是否正确,但我希望这些功能块会有所帮助。 此代码会将您的列表框项目重新分配为2个Double:

数组
    Dim allLatitudes(0) As Double
    Dim allLongtitudes(0) As Double
    Dim counter As Integer

    For Each item In ListBox1.Items
        Dim tempstr = item.ToString

        Dim value = tempstr.Split(","c)
        Dim lat = Double.Parse(value(0)) ' to convert it to numeric
        Dim lon = Double.Parse(value(1)) ' to convert it to numeric

        ReDim Preserve allLatitudes(counter)
        allLatitudes(UBound(allLatitudes)) = lat

        ReDim Preserve allLongtitudes(counter)
        allLongtitudes(UBound(allLongtitudes)) = lon

        counter = counter + 1
    Next

如果你想获得每个项目2个数组,一个包含除最后一个数据之外的所有值,第二个数据包含除第一个之外的所有值,而不是代码:

    For Each item In ListBox1.Items
        Dim tempstr = item.ToString

        Dim value = tempstr.Split(","c)
        Dim lat = value.Take(value.Length - 1).ToArray()
        Dim lon = value.Skip(1).ToArray()
    Next