2015-05-09 103 views
-2

代碼波紋管將一個字符串分成七個字符串,每個字符串分成一個數組。有人可以解釋它是如何工作的詳細?有關數組的這段代碼是如何工作的?

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

請花點時間閱讀本*仔細*:[提問]等都不是教程服務。花費一些精力去研究MSDN。 – Plutonix

+0

[參考資料來源](http://referencesource.microsoft.com/)揭示.net框架的內部工作原理。 –

回答

0
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) 

這是創建替補或功能的一個奇特的方式「在線」。它本質上等同於:

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

下一部分使用Enumerable class,其Range method產生一系列數字來送入拉姆達的。

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 
+0

其他示例:http://stackoverflow.com/questions/7376987/how-to-split-a-string-into-a-fixed-length-string-array?rq=1 –