VB.NET:如何用单循环实现拆分变量?现有嵌套循环问题咨询
解决VB中嵌套For Each循环重复匹配的问题
你现在的嵌套For Each循环会把每个产品和每个价格都交叉配对一遍——这肯定不是你想要的效果对吧?毕竟产品和价格应该是一一对应的,所以我们只需要按索引遍历一次数组就好,完全不需要嵌套循环。
问题根源
你的代码里,外层循环遍历所有产品,内层循环遍历所有价格,这样会生成产品数量 × 价格数量行数据,而不是每个产品对应一个价格的正确行。
解决方案:按索引遍历数组
我们可以先把产品和价格都分割成字符串数组,然后通过索引来一一匹配,只需要一次循环就搞定:
' 先把当前行的产品和价格分割成数组 Dim productsArray As String() = Form1.DataGridView1.CurrentRow.Cells(2).Value.ToString.Split(", ") Dim pricesArray As String() = Form1.DataGridView1.CurrentRow.Cells(4).Value.ToString.Split(", ") ' 取两个数组中较短的长度,避免索引越界 Dim maxIndex As Integer = Math.Min(productsArray.Length, pricesArray.Length) - 1 ' 按索引循环,一一对应产品和价格 For i As Integer = 0 To maxIndex Dim product As String = productsArray(i).Trim() ' 去除可能的空格 Dim price As String = pricesArray(i).Trim() Products.AppendLine(String.Format(" <tr>{0} <td>{1}</td>{0} <td align=""center"">{2}</td>{0} </tr>", Environment.NewLine, product, price)) Next
额外说明
- 处理数组长度不一致:用
Math.Min取较短数组的长度,避免出现索引越界的错误(比如产品数量和价格数量不相等的情况)。 - Trim()处理:加上
.Trim()可以去掉分割后字符串两端可能存在的空格,让最终生成的HTML数据更干净。 - 性能优化:这种按索引遍历的方式只需要一次循环,不仅逻辑更清晰,运行效率也比嵌套循环高。
内容的提问来源于stack exchange,提问作者user3580480
相关产品推荐
相关产品推荐

