【问题标题】:Linking ranges to item in collection将范围链接到集合中的项目
【发布时间】:2011-08-17 02:47:06
【问题描述】:

我有一个这样的集合

Private Shared ReadOnly thermoPaths As New ReadOnlyCollection(Of String) _
({
   "thermometer_000_108x320.jpg",
   "thermometer_010_108x320.jpg",
   "thermometer_020_108x320.jpg",
   "thermometer_030_108x320.jpg",
   "thermometer_040_108x320.jpg",
   "thermometer_050_108x320.jpg",
   "thermometer_060_108x320.jpg",
   "thermometer_070_108x320.jpg",
   "thermometer_080_108x320.jpg",
   "thermometer_090_108x320.jpg",
   "thermometer_100_108x320.jpg"
})

并希望将 1 到 100 之间的十进制值链接到我收藏中的相应项目。

所以基本上我想要实现的就是这个。

Select Case Decimal.Round(value)
    Case 1 To 9
        Dim x As String = thermoPaths(0)
    Case 10 To 19
        Dim x As String = thermoPaths(1)
    Case 20 To 29
        Dim x As String = thermoPaths(2)
    Case 30 To 39
        Dim x As String = thermoPaths(3)
    case ''AND SO ON
End Select

但我确定必须有一种“更清洁”的方式来做到这一点??

【问题讨论】:

    标签: .net vb.net math collections rounding


    【解决方案1】:

    只需除以四舍五入即可得到索引。

    i = Math.Ceiling(value / 10)
    If value >= 0 AndAlso i < thermoPaths.Count Then
        path = thermoPaths(i)
    Else
        path = Nothing
    End If
    

    一些测试点:

    value   i   path
     -1     0   <null> (because value < 0)
      0     0   thermometer_000_108x320.jpg
      1     1   thermometer_010_108x320.jpg
      5     1   thermometer_010_108x320.jpg
     10     1   thermometer_010_108x320.jpg
     49     5   thermometer_050_108x320.jpg
     51     6   thermometer_060_108x320.jpg
     90     9   thermometer_090_108x320.jpg
     91    10   thermometer_100_108x320.jpg
    100    10   thermometer_100_108x320.jpg
    101    11   <null> (because i > 10)
    

    【讨论】:

      【解决方案2】:

      将值除以 10,然后得到它的下限,应该会给你适当的索引。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-12-01
        • 1970-01-01
        • 1970-01-01
        • 2016-08-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多