【问题标题】:Finding an item in a list with maximum value在列表中查找具有最大值的项目
【发布时间】:2016-02-09 20:47:23
【问题描述】:

我是 VB.Net 的初学者。在我正在处理的代码中,有一个名为 Market 的类,其属性为 Demand(整数)。我已经列出了所有 Market 实例。在代码中的某个时刻,我需要在列表中找到具有最高需求值的 Market 实例。我怎样才能有效地做到这一点(不遍历列表的所有成员并将他们的需求与找到的最低值进行比较)。 谢谢您的帮助 美好的一天!

【问题讨论】:

  • 查看您所指的代码段会很有帮助。
  • 你是对的,对不起。我会记住下一个问题。谢谢

标签: vb.net list max


【解决方案1】:

您可以使用OrderByDescending方法将List按Demand属性排序,然后选择第一项。

    Dim markets As New List(Of Market)
    markets.Add(New Market With {.Demand = 10})
    markets.Add(New Market With {.Demand = 30})
    markets.Add(New Market With {.Demand = 20})
    Dim topMarket As Market = markets.OrderByDescending(Function(m) m.Demand).FirstOrDefault

【讨论】:

  • @Helia on SO,单击复选标记会显示“谢谢”,然后(当您获得 15 个代表时)单击向上箭头
  • 另一个问题:假设市场有另一个布尔属性(我们称之为可用)。如何在 Markets 列表中找到需求最大且可用属性为 true 的市场实例?谢谢
  • @Helia 这在 LINQ 查询格式中可能会更短,但我会坚持与我的回答相同的格式。您可以使用Where 方法仅选择通过测试的项目。 Dim topMarket As Market = markets.Where(Function(m) m.Available).OrderByDescending(Function(m) m.Demand).FirstOrDefault
【解决方案2】:

使用 Linq。这是一个小例子。我尝试使用您指定的变量名称。不知道你的清单叫什么,所以我就叫它 MarketList

Public Class Form1
Private MarketList As List(Of Market)
Public Sub New()

    ' This call is required by the designer.
    InitializeComponent()
    MarketList = New List(Of Market)()
    ' Add any initialization after the InitializeComponent() call.
    RunIt()
End Sub
Private Sub RunIt()
    Dim oMarket As New Market()
    oMarket.Demand = 0
    MarketList.Add(oMarket)
    oMarket = New Market()
    oMarket.Demand = 1
    MarketList.Add(oMarket)
    oMarket = New Market()
    oMarket.Demand = 2
    MarketList.Add(oMarket)

    Dim oMax As Market = (From mrkt As Market In MarketList Select mrkt Order By mrkt.Demand).Last()
    MessageBox.Show(String.Format("Market List has: {0} members" + vbNewLine + "Maximum Demand: {1}", MarketList.Count.ToString(), iMax.Demand.ToString()))
End Sub
Public Class Market
    Private _dmd As Integer
    Public Property Demand() As Integer
        Get
            Return _dmd
        End Get
        Set(ByVal value As Integer)
            _dmd = value
        End Set
    End Property

End Class

我根据您的要求对其进行了编辑。您基本上在做与您接受的答案相同的事情,只是方式略有不同。无论如何,这是您或其他人的替代方案。

【讨论】:

  • 嗨 Aaron,感谢您的回复。只是一个问题,使用您建议的 LINQ,我可以找到最大需求值,同时我想找到具有 MAX 需求值的 Market 实例。可以更改您的代码以执行此任务吗? Blackwood 下面建议的方法当然效果很好。谢谢
  • 你可以做到。我在开车。给我一个小时
猜你喜欢
  • 1970-01-01
  • 2014-05-10
  • 1970-01-01
  • 2014-03-20
  • 2022-11-21
  • 1970-01-01
  • 2016-09-10
  • 1970-01-01
  • 2016-06-30
相关资源
最近更新 更多