【问题标题】:Sorting 2 Lists of Doubles VB.net排序 2 个双打列表 VB.net
【发布时间】:2021-06-21 04:31:04
【问题描述】:

我有 2 个双打列表:

Dim rad as New List(Of Double)
Dim phi As New List(Of Double)

这些列表包含极坐标值并且相互链接,这意味着 rad(0) 属于 phi(0) 等等。

我想根据半径对数字进行排序,所以我可以试试

rad.Sort()

但这意味着 rad(0) 不再属于 phi(0)。有没有一种优雅的方式来链接条目并根据半径对其进行排序?

提前谢谢你!!

【问题讨论】:

  • 使用例如List(Of Class)(有两个属性)而不是两个List(Of Double)?
  • @Jimi 甚至是List(Of (rad As Double, phi As Double))
  • 非常感谢,还在学习战胜VB :-)
  • @Craig HashSet(Of Structure) 怎么样? (如果重复值需要被吸收并自动丢弃)
  • @Jimi 当然,这对于某些用例来说可能有意义,尽管我认为这里的请求没有意义,因为它不会被排序。也许是SortedSet。 (应该注意,据我所知,我建议的值元组是Structure。)

标签: vb.net list sorting


【解决方案1】:

根据 Jimi 的评论。

一个类

Private Class PolarCoord
    Public rad As Double
    Public phi As Double
    ''' <summary>
    ''' 
    ''' </summary>
    ''' <param name="r">rad</param>
    ''' <param name="p">phi</param>
    ''' <remarks></remarks>
    Public Sub New(r As Double, p As Double)
        Me.rad = r
        Me.phi = p
    End Sub
End Class

用法

    Dim PClist As New List(Of PolarCoord)
    'some sample data
    For Each r As Double In {1.0#, 3.0#, 2.0#, 9.0#, 7.0#}
        Dim pc As New PolarCoord(r, r / 2)
        PClist.Add(pc)
    Next
    'and then sort
    PClist = PClist.OrderBy(Function(pc) pc.rad).ToList 'sort

【讨论】:

  • 我建议将radphi 公开为ReadOnly Property 而不是读写字段。将其设为Structure 可能也很有意义,因为很可能只有值很重要,而不是单个类身份。
【解决方案2】:

感谢您的所有回答。不幸的是,我无法使用它们,我认为它们对我来说太复杂了。经过深入研究,这是我的解决方案:

        Dim dt As New DataTable
        dt.Columns.Add("ColumnRAD", GetType(Double))
        dt.Columns.Add("ColumnPHI", GetType(Double))


        For i = 0 To rad.Count - 1
            dt.Rows.Add(rad(i), phi(i))
        Next

        rad.Clear()
        phi.Clear()


        Dim dfv As DataView = dt.DefaultView
        dfv.Sort = "ColumnRAD ASC"
        Dim dtnew As DataTable = dfv.ToTable()


        For i = 0 To dt.Rows.Count - 1
            rad.Add(dtnew.Rows(i)(0))
            phi.Add(dtnew.Rows(i)(1))
        Next

此代码读取两个 Doubles 列表,并在条目链接时按升序对它们进行排序。它还会清除列表,因为在那之后,它会将新数据添加回这些原始列表。

再次感谢您!

【讨论】:

    猜你喜欢
    • 2018-01-11
    • 1970-01-01
    • 2018-04-28
    • 1970-01-01
    • 1970-01-01
    • 2012-02-07
    • 2011-05-17
    • 2014-06-04
    • 1970-01-01
    相关资源
    最近更新 更多