【问题标题】:How does this code about arrays work?这段关于数组的代码是如何工作的?
【发布时间】:2015-05-09 12:19:40
【问题描述】:

下面的代码将一个字符串分成七个字符的字符串,每个字符串组成一个数组。有人可以详细解释一下它是如何工作的吗?

Dim orig = "12344321678900987"
Dim res = Enumerable.Range(0,orig.Length\8).[Select](Function(i) orig.Substring(i*8,8))

【问题讨论】:

  • 请花点时间仔细阅读How to Ask所以不是教程服务。花一些精力在 MSDN 上做研究。
  • Reference Source 揭示了 .net 框架的内部工作原理。

标签: arrays vb.net split


【解决方案1】:
Dim orig = "12344321678900987"
Dim res = Enumerable.Range(0,orig.Length\8).[Select](Function(i) orig.Substring(i*8,8))

此代码使用一些简洁的语言技巧来减少将字符串消化成更小的段所需的代码量。从里到外,先有一个Lambda Expression

Function(i) orig.Substring(i * 8, 8)

这是一种“内联”创建 Subs 或 Functions 的奇特方式。它基本上等同于:

Function subStr(ByVal i As Integer) As String
    Return orig.Substring(i * 8, 8)
End Function

下一部分使用Enumerable class 和它的Range method 生成一系列数字以输入 lambda。

Enumerable.Range(0, orig.Length \ 8)

这是一种更高级的写作方式:

For i As Integer = 0 To (orig.Length \ 8)
    'Do something with i
End For

.[Select] 有点神奇,它在循环(或范围)中获取当前的i,并允许使用它。在这个例子中是:

subStr(i)

所以这个简洁的单行作业也可以写成:

Dim orig As String = "12344321678900987"
Dim res as String()
For i As Integer = 0 To (orig.Length \ 8)
    Array.Resize(res, res.Length + 1)
    res(res.Length - 1) = subStr(i)
End For

Function subStr(ByVal i As Integer) As String
    Return orig.Substring(i * 8, 8)
End Function

【讨论】:

猜你喜欢
  • 2015-06-17
  • 2011-05-16
  • 2014-05-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多