循环遍历一个数组并将每个有些步骤放入一个数组

时间:2015-02-27 20:02:52

标签: arrays vb.net string algorithm

所以我最近一直在忙着完成一项任务,现在我在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

(我真的要求你为我做一些算法:/)

2 个答案:

答案 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