2011-08-17 61 views
1

我有收集這樣鏈接範圍項中收集

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 

但我確定必須有一個「乾淨」的方式來做到這一點?

回答

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) 
0

將值除以10,然後得到底線,應該給你適當的指數。