繁体   English   中英

VB.Net Array.Sort使值无效

[英]VB.Net Array.Sort nullifying values

我在VB.net程序中的Array.Sort功能遇到了严重的麻烦。 我代码中的所有内容,包括粘贴到此处的内容,似乎在循环中一直都起作用(在代码的末尾),包括用我期望的信息填充FinalDataArray, 但是当我将其传递给Array.Sort时,然后我最终得到在每个索引处都有一个空值的FinalDataArray。 有什么想法可能导致这种情况?

我的代码的适用部分如下:

更新:我已经更新了代码块,以显示该程序中的整个Sub。

Private Sub btnDisplay_Click(sender As System.Object, e As System.EventArgs) Handles btnDisplay.Click
    frmMain.CurrentFigure = txtFigure.Text
    frmFigureViewer.Show()
    Dim ArrayUpperBound = FGCFigNo.Length
    FigureResult = Enumerable.Range(0, FGCFigNo.Length).Where(Function(f) FGCFigNo(f) = frmMain.CurrentFigure).ToArray
    frmFigureViewer.lblFGCfromFGCList.Text = FGCCode(FigureResult(0))
    frmFigureViewer.lblTOPCurrentFigureTitle.Text = FGCTitle(FigureResult(0))
    frmFigureViewer.lblTOPDisplayFigure.Text = FGCFigNo(FigureResult(0))
    frmFigureViewer.lblCurrentSheet.Text = FGCSheetNo(FigureResult(0))
    frmFigureViewer.lblFinalSheet.Text = FGCSheetNo(FigureResult(FigureResult.Length - 1))
    ArtResult = FGCArtID(FigureResult(frmFigureViewer.lblCurrentSheet.Text - 1))
    Dim JpgFilePath As String = "C:\Temp\StandaloneRPSTLViewer" + "\" + Mid(ArtResult, 1, ArtResult.Length - 4) + ".jpg"
    If File.Exists(JpgFilePath) Then
        GoTo OnlyDisplay
    End If
    Dim SourceFile As String = ""
    Dim DestinationFile As String = ""
    Dim EpsFilePath As String = ARTFOLDER + "\" + ArtResult
    If Not Directory.Exists("C:\Temp\StandaloneRPSTLViewer") Then
        MkDir("C:\Temp\StandaloneRPSTLViewer")
    End If



    SourceFile = EpsFilePath
    DestinationFile = Mid(EpsFilePath, 1, Len(EpsFilePath) - 4) + " view.eps"
    FileCopy(SourceFile, DestinationFile)

    EpsFilePath = DestinationFile

    RunGS("-q", "-dNOPAUSE", "-dBATCH", "-dSAFER", "-sDEVICE=jpeg", _
      "-r600", "-dJPEGQ=100", "-dEPSCrop", "-dDownScaleFactor=0", "-dTextAlphaBits=4", "-dGraphicsAlphaBits=4", _
      "-sPAPERSIZE=letter", "-sOutputFile=" & JpgFilePath, EpsFilePath)
    Kill(EpsFilePath) 'KILLS THE "...view.eps" temporary file in the working folder.

OnlyDisplay:

    frmFigureViewer.picMyJPEG.Image = Image.FromFile(JpgFilePath)

    Fig036Result = Enumerable.Range(0, FIGURENO.Length).Where(Function(f) FIGURENO(f) = frmMain.CurrentFigure).ToArray

    'BUILD DICTIONARY HERE'
    Dim dict As Dictionary(Of String, String) = New Dictionary(Of String, String)
    Dim DictionaryFigureNumber As Integer = 1
    Dim DictionarySortPosition As Integer = 1
    Do Until DictionaryFigureNumber = 1000
        Dim DictionaryFigureLetterASCII As Integer = 65
        dict.Add(DictionaryFigureNumber, DictionarySortPosition)
        DictionarySortPosition = DictionarySortPosition + 1
        Do Until DictionaryFigureLetterASCII = 91

            dict.Add(DictionaryFigureNumber & Chr(DictionaryFigureLetterASCII), DictionarySortPosition)
            DictionarySortPosition = DictionarySortPosition + 1
            DictionaryFigureLetterASCII = DictionaryFigureLetterASCII + 1
        Loop
        DictionaryFigureNumber = DictionaryFigureNumber + 1
    Loop
    'END OF DICTIONARY BUILDING

    Dim TempLength = Fig036Result.GetLength(0)
    TempLength = TempLength - 1
    Dim CurrentPlace As Integer = 0
    Dim TempItemNo As String
    Dim ArrayString As String = ""
    Do Until CurrentPlace > TempLength

        Dim ArrayLocation As Integer = Fig036Result(CurrentPlace)
        TempItemNo = ITEMNO(ArrayLocation)
        TempSMR = SMnR(ArrayLocation)
        TempNSN = NSN(ArrayLocation)
        TempCAGE = CAGE(ArrayLocation)
        TempPartNum = PARTNUM(ArrayLocation)
        TempDescription = ITEMName(ArrayLocation)
        TempUOC = UOC(ArrayLocation)
        TempQTY = QTYFIG(ArrayLocation)
        TempIndvFGC = FGC(ArrayLocation)
        Dim TempValue As String = ""
        dict.TryGetValue(TempItemNo, TempValue)
        ArrayString = TempValue + "::" + TempItemNo + "|" + TempSMR + "|" + TempNSN + "|" + TempCAGE + "|" + TempPartNum + "|" + TempDescription + "|" + TempUOC + "|" + TempQTY + "|" + TempIndvFGC + "|"
        FinalDataArray(CurrentPlace) = ArrayString

        'FinalSortArray(CurrentPlace) = TempValue

        CurrentPlace = CurrentPlace + 1
    Loop
    Array.Sort(FinalDataArray)

End Sub

Update2:我已经更新了代码的循环部分,如下所示:

Dim TempValue As String = ""
        dict.TryGetValue(TempItemNo, TempValue)
        ArrayString = TempItemNo + "|" + TempSMR + "|" + TempNSN + "|" + TempCAGE + "|" + TempPartNum + "|" + TempDescription + "|" + TempUOC + "|" + TempQTY + "|" + TempIndvFGC + "|"
        FinalDataArray(CurrentPlace) = ArrayString

        FinalSortArray(CurrentPlace) = TempValue

        CurrentPlace = CurrentPlace + 1
    Loop
    Array.Sort(FinalSortArray, FinalDataArray)

我对两个数组的新声明是:

    Public FinalSortArray(50000) As Integer
Public FinalDataArray(50000) As String

我认为您的问题是您不知道数组的实际大小,它比您预期的Array.Sort大,并且Array.Sort从背面重新Array.Sort数组...考虑:

Dim arr() As String
ReDim arr(10)
arr(0) = "Z"
arr(2) = "3"
arr(1) = "Boolean"
arr(5) = "Hello"
Array.Sort(arr)
For i As Integer = 0 To 10
  Debug.Print(arr(i))
Next

即使我将数组的大小指定为11并仅在数据中填充了4个随机点,在Array.Sort之后,我的数据Array.Sort数组的后面排序,并且只有arr(7)...arr(10)包含数据(以正确的顺序)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM