【问题标题】:Looping through an array and placing something every somewhat steps into an array循环遍历数组并将每一步的东西放入数组中
【发布时间】:2015-02-27 20:02:52
【问题描述】:

所以我最近一直忙于一项任务,现在我正在使用 Visual Basic 进行编程,使用 Visual Studio 2013 Update 4,并且我正在使用 .NET Framework。

这是我的问题/疑问: 我想要完成的是我遍历一个仅包含字符的 81(长度)数组。我想遍历这个数组,在我的 for 循环的 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

(我几乎是在要求你为我做一个小算法:/)

【问题讨论】:

标签: arrays vb.net string algorithm


【解决方案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

【讨论】:

  • 非常感谢您的回答。这或多或少正是我所需要的。
【解决方案2】:

我想到了三种可能性。

第一种方法是一种经典的方法,它每次构建一个字符串,直到您读取 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

【讨论】:

  • 非常感谢您的回答。它让我学到了很多,我现在知道如何在我的代码中实现它。虽然稍后发布的答案更适合我的确切问题;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-07-31
  • 1970-01-01
  • 2016-04-19
  • 2017-12-12
  • 1970-01-01
  • 2017-08-16
  • 1970-01-01
相关资源
最近更新 更多