将范围链接到集合中的项目

时间:2011-08-17 02:47:07

标签: .net vb.net math collections rounding

我有一个这样的集合

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

但我确信必须有一种“更清洁”的方法吗?

2 个答案:

答案 0 :(得分: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)

答案 1 :(得分:0)

将值除以10,然后得到底线,应该给你适当的索引。