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
I'm having some serious trouble with the Array.Sort functionality within my VB.net program. Everything within my code, including what is pasted here seems to function all the way through the loop (which is at the end of my code), including populating FinalDataArray with the information that I expect, however when I pass it to Array.Sort, then I end up with FinalDataArray having a null value at every index. Any thoughts on what could be causing this?
The applicable portion of my code is as follows:
UPDATE: I've updated my code block to show the entire Sub from this program.
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: I've updated the looping portion of the code as follows:
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)
My new declaration for my two arrays are:
Public FinalSortArray(50000) As Integer Public FinalDataArray(50000) As String
原文:https://stackoverflow.com/questions/35301641
最满意答案
您可以使用
DataTable
作为计算器:Dim calc As New DataTable() Dim result = CType(calc.Compute("1 + 3 * 6 - (2 - 1)", Nothing), Double) ' 18.0
查看
DataColumn.Expression
的注释以查看所支持的内容。You can use a
DataTable
as calculator:Dim calc As New DataTable() Dim result = CType(calc.Compute("1 + 3 * 6 - (2 - 1)", Nothing), Double) ' 18.0
Have a look at the remarks of
DataColumn.Expression
to see what is supported.
相关问答
更多-
TCP/IP模型是一个________。[2023-10-02]
a -
如何获取数字的数字而不将其转换为字符串/字符数组?(How to get the digits of a number without converting it to a string/ char array?)[2022-05-04]
以下按照升序重要性(即单位,数十等)的顺序打印数字: do { int digit = n % 10; putchar('0' + digit); n /= 10; } while (n > 0); The following prints the digits in order of ascending significance (i.e. units, then tens, etc.): do { int digit = n % 10; putchar('0' ... -
下列中不属于面向对象的编程语言的是?[2022-05-30]
a -
您可以使用DataTable作为计算器: Dim calc As New DataTable() Dim result = CType(calc.Compute("1 + 3 * 6 - (2 - 1)", Nothing), Double) ' 18.0 查看DataColumn.Expression的注释以查看所支持的内容。 You can use a DataTable as calculator: Dim calc As New DataTable() Dim result = CType(cal ...
-
将int(数字)转换为带前导零的字符串?(Convert int (number) to string with leading zeros? (4 digits) [duplicate])[2023-05-15]
使用String.PadLeft这样: var result = input.ToString().PadLeft(length, '0'); Use String.PadLeft like this: var result = input.ToString().PadLeft(length, '0'); -
您根本不需要转换它: % perl -e 'print "5.45" + 0.1;' 5.55 You don't need to convert it at all: % perl -e 'print "5.45" + 0.1;' 5.55
-
你非常接近: local execute = { ['+'] = function (x, y) return x + y end, ['-'] = function (x, y) return x - y end, } print(execute['+'](2, 2) == 4) You are very close: local execute = { ['+'] = function (x, y) return x + y end, ['-'] = function (x, y) r ...
-
将数字转换为数字列表(Convert number to list of digits)[2021-11-15]
这是我的标准前奏的数字功能: (define (digits n . args) (let ((b (if (null? args) 10 (car args)))) (let loop ((n n) (d '())) (if (zero? n) d (loop (quotient n b) (cons (modulo n b) d)))))) 你的函数版本在字符串和数字之间来回切换; 我的版本纯粹是算术。 我的版本还提供了十进制 ... -
你实际上并没有丢失数字; 这就是它如何被打印到控制台: options(digits = 4) R> as.numeric(res[[1]][1]) #[1] 44.52 ## options(digits = 12) R> as.numeric(res[[1]][1]) #[1] 44.524768336 正如David Arenburg的评论中所指出的,你也可以使用print(..., digits =
) 。 You didn't actually lose the digits; that ... -
c# - 将字符串中的数字转换为具有一定数量的数字(c# - Convert number in string to have certain number of digits)[2023-06-12]
你可以使用String.PadLeft : string result = number.PadLeft(6, '0'); 如果数字可能是负数,则这不起作用,您需要int.Parse方法。 You could use String.PadLeft: string result = number.PadLeft(6, '0'); If the number can be negative this doesn't work and you need your int.Parse approach.