【问题标题】:VB .Net Get the integers variable's name that has the loweset valueVB .Net 获取具有最小值的整数变量的名称
【发布时间】:2021-10-08 00:51:09
【问题描述】:

我希望从整数变量数组中获取包含最小值的变量名。

Dim var1 As Integer = 101
Dim var2 As Integer = 14
Dim var3 As Integer = 75
Dim var4 As Integer = 8
Dim var5 As Integer = 9

Dim vals As Integer() = {var1, var2, var3, var4, var5}

Dim smallest As Integer = Integer.MaxValue

For Each element As Integer In vals
    smallest = Math.Min(smallest, element)
Next

smallest = 8,但是如何获得名称“var4”?

谢谢

【问题讨论】:

  • 请问你为什么需要变量的名称而不是它的值?

标签: vb.net variables integer


【解决方案1】:

在编译之前,局部变量的名称仅在您的 Visual Basic 文本中是已知的。它们在编译的应用程序中丢失。即,您无法在运行时访问它们。

您可以使用元组将名称与数字一起存储为字符串。

Dim namedIntegers As (name As String, value As Integer)() = {
    ("var1", 101),
    ("var2", 14),
    ("var3", 75),
    ("var4", 8),
    ("var5", 9)
}

Dim smallest = namedIntegers.OrderBy(Function(x) x.value).First()
Console.WriteLine($"Smallest variable is {smallest.name} = {smallest.value}")
Console.ReadKey()

打印

最小的变量是 var4 = 8

Function(x) x.valueLambda Expression

【讨论】:

    【解决方案2】:

    可以得到数组中的index,但不能得到变量名:

    Dim var1 As Integer = 101
    Dim var2 As Integer = 14
    Dim var3 As Integer = 75
    Dim var4 As Integer = 8
    Dim var5 As Integer = 9
    
    Dim vals As Integer() = {var1, var2, var3, var4, var5}
    
    Dim smallest As Integer = Integer.MaxValue
    Dim smallestIndex As Integer = 0
    
    For Each i As Integer = 0 To vals.Length - 1
        If vals(i) < smallest Then
           smallestIndex = i
           smallest = vals(i)
        End If    
    Next
    

    变量名称供程序员使用。如果您将它们暴露给用户而不是为了报告错误,那么您做错了。

    也许你想要一个这样的数组:

    Dim var(5) As Integer = {0, 101, 14, 75, 8, 9}
    

    现在索引也暗示了变量。

    【讨论】:

      【解决方案3】:

      您无法获取变量名称,因为它不是填充了这些变量值的数组的一部分。如果索引不够,确实需要名称,则应考虑使用不同的集合:Dictionary(Of String, Int32):

      Dim dict As New Dictionary(Of String, Int32)
      dict.Add("var1", 101)
      dict.Add("var2", 14)
      dict.Add("var3", 75)
      dict.Add("var4", 8)
      dict.Add("var5", 9)
      
      Dim lowestValuePair = dict.OrderBy(Function(pair) pair.Value).First()
      Dim name As String = lowestValuePair.Key   ' var4
      Dim value As Int32 = lowestValuePair.Value ' 8
      

      我这里用的是OrderByFirst的LINQ方法,所以需要加上Imports System.Linq

      【讨论】:

      • 字典在按键查找时非常有效。填充和枚举哈希表的开销在这里没有得到回报。在这里使用List(Of KeyValuePair(Of String, Int32)) 会更有效。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-09
      • 1970-01-01
      • 2014-02-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多