所以我最近一直在忙着完成一项任务,现在我在Visual Basic中编程,使用Visual Studio 2013 Update 4,并且我在.NET Framework中工作。
这是我的问题/疑问: 我想要完成的是我运行81(长度)的数组,只包含字符。我想迭代遍历这个数组,在我的for-loop的9个步骤后,我想将这9个字符保存到字符串中。
我的意思是我想在一个字符串中保存0-8字符,然后在另一个字符串中保存9-17,依此类推......
(数组将在我的程序中填写)
Dim charactersArray(81) as character
For intIndex as integer = 0 to 81
'Add 9 characters into a string
Next
我已经尝试过很多方法来完成这项工作,但未能找到解决方案,我已经在互联网上搜索过但我无法找到解决方案。 所以希望这里的任何人都可以帮助我。 :d
(我真的要求你为我做一些算法:/)
答案 0 :(得分:1)
有三种可能性浮现在脑海中。
第一个是一种经典的方法,它会一次构建一个字符串,直到你读完9个字符,然后重新开始接下来的9个字符,直到你到达数组的末尾。
这里的诀窍是MOD operator发现你读了9个字符(注意我从一个开始,以避免第一个0 MOD 9返回0)
Dim sb = new StringBuilder()
For intIndex as integer = 1 to 81
if intIndex Mod 9 = 0 then
sb.Append(charactersArray(intIndex - 1))
Console.WriteLine(sb.ToString())
sb.Clear()
else
sb.Append(charactersArray(intIndex - 1))
End if
Next
另一种方法使用Linq并且更具可读性
Dim index = 0
Do while(index < 81)
Dim s = new String(charactersArray.Skip(index).Take(9).ToArray())
Console.WriteLine(s)
index += 9
Loop
这里我构建一个新的字符串,跳过已经读过的字符,并使用接下来的9个字符构建一个新的字符串
第三种方法是使用Array.Copy方法
Dim charBuffer(8) as Char
Dim index = 0
Do while(index < 81)
Array.Copy(charactersArray, index, charBuffer, 0, 9)
Console.WriteLine(new string(charBuffer))
index += 9
Loop
在100000次迭代循环中,这三种方法的性能如下(在您的硬件上采取谨慎和测试)
StringBuilder:66 ms
Linq:706 ms
Array.Copy:40 ms
答案 1 :(得分:1)
这打印到控制台而不是像ArrayList那样添加项目,它还修复了原始For
循环中的逐个错误:
Dim charactersArray(81) as character
For intIndex as integer = 0 to 80 Step 9
Dim s = New String(charactersArray, intIndex, 9)
System.Console.WriteLine(s)
Next