代碼波紋管將一個字符串分成七個字符串,每個字符串分成一個數組。有人可以解釋它是如何工作的詳細?有關數組的這段代碼是如何工作的?
Dim orig = "12344321678900987"
Dim res = Enumerable.Range(0,orig.Length\8).[Select](Function(i) orig.Substring(i*8,8))
代碼波紋管將一個字符串分成七個字符串,每個字符串分成一個數組。有人可以解釋它是如何工作的詳細?有關數組的這段代碼是如何工作的?
Dim orig = "12344321678900987"
Dim res = Enumerable.Range(0,orig.Length\8).[Select](Function(i) orig.Substring(i*8,8))
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
其他示例:http://stackoverflow.com/questions/7376987/how-to-split-a-string-into-a-fixed-length-string-array?rq=1 –
請花點時間閱讀本*仔細*:[提問]等都不是教程服務。花費一些精力去研究MSDN。 – Plutonix
[參考資料來源](http://referencesource.microsoft.com/)揭示.net框架的內部工作原理。 –