2013-10-17 128 views
1

我有一個關於代碼如下問題:Python來VB6轉換

def getJenksBreaks(dataList, numClass): 

dataList.sort() 

mat1 = [] 
for i in range(0,len(dataList)+1): 
    temp = [] 
    for j in range(0,numClass+1): 
     temp.append(0) 
    mat1.append(temp) 

mat1例如將這個樣子

0, 0, 0, 0, 0, 0 

0, 0, 0, 0, 0, 0 

0, 0, 0, 0, 0, 0 

0, 0, 0, 0, 0, 0 

之後,創建mat2

mat2 = [] 
for i in range(0,len(dataList)+1): 
    temp = [] 
    for j in range(0,numClass+1): 
     temp.append(0) 
mat2.append(temp) 

然後mat1mat2被修改IED:

for i in range(1,numClass+1): 
    mat1[1][i] = 1 
    mat2[1][i] = 0 
    for j in range(2,len(dataList)+1): 
     mat2[j][i] = float('inf') 

當我看到這一行:

mat1[1][i] = 1 

在我看來,在一個XY位置的項目被改變。

我想將此代碼移植到VB6,而且我沒有看到任何方式來反映VB6中的這種行爲。一個集合將無法做到這一點,我的意思是使用X和Y訪問項目,是嗎?

+1

爲什麼要將*轉換爲*已棄用多年的語言? –

+0

因爲我必須。 – tmighty

+0

我需要將它集成到一個龐大的VB6應用程序中,我無法輕鬆轉換爲其他語言。目前,我將這個Python代碼轉換爲VB6更容易,而不是將我的巨大應用程序轉換爲.NET或Python。但謝謝你的提問。 – tmighty

回答

0

嗯,我創建了我自己的類來處理這個問題。如果有人有更好的想法,請告訴我。

Option Explicit 

Private m_XCount& 
Private m_YCount& 
Private m() As Variant 

Public Sub Add(ByRef u() As Variant) 

    If UBound(u) > m_XCount Then 
     m_XCount = UBound(u) 
    End If 

    m_YCount = m_YCount + 1 

    ReDim Preserve m(0 To m_XCount, 0 To m_YCount) 

    Dim l& 
    For l = 0 To UBound(u) 
     m(m_XCount + l, m_YCount) = u(l + 1) 
    Next l 

    m_YCount = m_YCount + 1 

End Sub 

Private Sub Class_Initialize() 

    ReDim m(0, 0) 

End Sub 
Public Property Get Value(ByVal uX As Long, ByVal uY As Long) As Variant 

    Value = m(uX, uY) 

End Property 
Public Property Let Value(ByVal uX As Long, ByVal uY As Long, ByVal uValue) 

    m(uX, uY) = uValue 

End Property