Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在没有逗号的情况下结束for循环?VB.NET_Vb.net - Fatal编程技术网

如何在没有逗号的情况下结束for循环?VB.NET

如何在没有逗号的情况下结束for循环?VB.NET,vb.net,Vb.net,我正要使用for循环保存一个单元格中的每个数字,下面是我的代码: For Each node As XmlNode In xmlnode Dim X As String Dim Y As String Dim Z As String X = node.SelectSingleNode("X").InnerText

我正要使用for循环保存一个单元格中的每个数字,下面是我的代码:

For Each node As XmlNode In xmlnode
                    Dim X As String
                    Dim Y As String
                    Dim Z As String
                    X = node.SelectSingleNode("X").InnerText
                    Y = node.SelectSingleNode("Y").InnerText
                    Z = node.SelectSingleNode("Z").InnerText

                    Dim noOfPts As Integer = 0  'number of data points in data
                    For i As Double = 0 To noOfPts
                        result = X + ","
                        result2 = Y + ","

                    Next
      Next

问题是我要结束循环而不保存逗号。与其说是“1,2,3,4,5”,不如说是“1,2,3,4,5”,从循环的末尾去掉逗号。

我喜欢这样做:

For i As Double = 0 To noOfPts
    If result <> "" Then result &= ", "
    result &= X

    If result2 <> "" Then result2 &= ", "
    result2 &= Y
Next
Dim xBuilder AS New StringBuilder()
Dim yBuilder As New StringBuilder()
Dim delimiter As String = ", "

For Each node As XmlNode In xmlnode
    Dim X As String = node.SelectSingleNode("X").InnerText
    Dim Y As String = node.SelectSingleNode("Y").InnerText
    Dim Z As String = node.SelectSingleNode("Z").InnerText

    For i As Integer = 0 To noOfPts
        xBuilder.Append(X).Append(delimiter)           
        yBuilder.Append(Y).Append(delimiter)
    Next
Next

' use Math.Max to prevent exception if builder is empty
xBuilder.Length = Math.Max(xBuilder.Length - delimiter.Length, 0)
yBuilder.Length = Math.Max(yBuilder.Length - delimiter.Length, 0)

Dim resultX As String = xBuilder.ToString() ' 1, 2, 3, 4, 5
Dim resultY As String = yBuilder.ToString()
对于i为双精度=0到noOfPts
如果结果为“”,则结果为
结果&=X
如果结果2“”,则结果2&=”
结果2&=Y
下一个

玩得开心

使用
StringBuilder
可以通过删除
if
语句简化循环,并在大多数情况下提高效率(尤其是在循环中构建字符串时)

我们通过按分隔符的长度“剪切”stringbuilder的长度来删除最后一个“冗余”分隔符

要使用
String.Join
您需要首先创建一个值集合

Dim xValues AS New List<string>()
Dim yValues As New List<string>()

For Each node As XmlNode In xmlnode
    Dim X As String = node.SelectSingleNode("X").InnerText
    Dim Y As String = node.SelectSingleNode("Y").InnerText
    Dim Z As String = node.SelectSingleNode("Z").InnerText

    For i As Integer = 0 To noOfPts
        xValues.Add(X)
        xValues.Add(Y)
    Next
Next

Dim resultX As String = String.Join(", ", xValues) ' 1, 2, 3, 4, 5
Dim resultY As String = String.Join(", ", yValues)
Dim xValues AS New List()
将Y值设置为新列表()
将每个节点作为XmlNode中的XmlNode
将X标注为字符串=节点。选择SingleNode(“X”)。InnerText
将Y调为String=node。选择SingleNode(“Y”)。InnerText
将Z标注为字符串=节点。选择SingleNode(“Z”)。InnerText
对于i,作为整数=0到noOfPts
xValues.Add(X)
xValues.Add(Y)
下一个
下一个
Dim resultX As String=String.Join(“,”,xValues)”1,2,3,4,5
Dim resultY As String=String.Join(“,”和Y值)

use string.join.code示例不清楚,
result
result2
来自何处?我们在每次迭代中给它分配新的值?问题很清楚,答案应该是
String.Join
,这里已经有少数人提出了这个建议。如果能听到否决投票的原因,我将不胜感激。如果答案是错误的,我们将很乐意修复或删除。从可读性和效率的角度来看,这个答案包含两种可接受的方法。我建议使用
String.Join
选项,该选项散列清晰易懂的步骤:1.收集信息,2。根据这些信息构建输出。1<从可读性的角度来看,代码>If-Then是一种糟糕的方法。2.将字符串与
&
运算符连接将创建原始值和附加值的副本,在循环中,它将增加每次迭代的几何级数内存消耗。适合这项工作的工具应该是
StringBuilder
。谢谢你的提示,我已经对这一个进行了更新,但什么也没发生@ナンダルケジー 别担心,这可能只是因为你的名声不好。我很高兴你有所进步。当心!