[英]What's the most efficient way of programming a conversion table algorithm
需要桌子嗎?
如果將三個值相加,將得到以下對應關系:
Low: 3, 4 or 5
Medium: 6
High: 7, 8, or 9.
碼:
P = V1 + V2 + V3
If P < 6 Then
R = 1
ElseIf P < 7 Then
R = 2
Else
R = 3
End If
您也可以直接將總和制成表格,或使用公式
Sgn(V1 + V2 + V3 - 6) + 2
(因為三個變量必須以某種方式出現,所以很難做到更緊湊)。
實際上,由於分數是對稱的,因此初始表可能已經被壓縮為
111 => 1
112 => 1
113 => 1
122 => 1
123 => 2
222 => 2
223 => 3
233 => 3
333 => 3
最后說明 :
如果分數以(-1, 0, +1)
比例表示,則公式可簡化為
Sgn(V1 + V2 + V3)
Sub heres_an_idea()
Dim dicLow As New Scripting.Dictionary
Dim dicMed As New Scripting.Dictionary
Dim dicHigh As New Scripting.Dictionary
dicLow.Add "LLL", ""
dicLow.Add "LLM", ""
dicLow.Add "LLH", ""
dicMed.Add "MMM", ""
dicHigh.Add "HHH", ""
If dicLow.Exists("MMM") Then
'low
Debug.Print "low"
ElseIf dicMed.Exists("MMM") Then
'med
Debug.Print "med"
ElseIf dicHigh.Exists("MMM") Then
'high
Debug.Print "high"
End If
End Sub
“最有效”是非常主觀的。 我會將所有值放入一個數組(數量不多),並根據您的值中的索引進行訪問。
考慮index = FirstValue + SecondValue*3 + ThirdValue*9
FirstValue:0 = L1,1 = L2,2 = L3
SecondValue,ThirdValue:0 = L1、1 = L2、2 = L3、3 =未使用
(此設置不是最佳的,因為您可以將未使用的第二個與使用的第三個結合使用,但是可以截斷這些值!)
這將導致3 *(3 * 4 + 1)= 39組合,一個小字符串!
將所有結果放入表中並組成一個字符串:
myData = "000001011001012122011122122001012122012"
,其中0 =低,1 =中,2 =高
定義函數(如果需要,並輸入):
VBA代碼:
Enum myType
L1 = 0
L2 = 1
L3 = 2
End Enum
Function getValue(ByVal V1 As myType, Optional ByVal V2 As myType = 3, Optional ByVal V3 As myType = 3)
getValue = Array("Low", "Meddium", "High")(Mid("000001011001012122011122122001012122012", V1 + V2 * 3 + V3 * 9 + 1, 1))
End Function
這將是短暫的。 使用前只需要稍微處理一下數據即可!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.