我有一個數組,其中包含隨機整數,如{2,3,4,7,8,9}
。我必須找回2個陣列像下面包含:如何從數組中刪除第一個或最後一個項目並創建新的數組?
{2,3,4,7,8}
(刪除最後一個沒有){3,4,7,8,9}
(除去第一無)
我怎樣才能在VB中做到這一點,有什麼建議?
我有一個數組,其中包含隨機整數,如{2,3,4,7,8,9}
。我必須找回2個陣列像下面包含:如何從數組中刪除第一個或最後一個項目並創建新的數組?
{2,3,4,7,8}
(刪除最後一個沒有){3,4,7,8,9}
(除去第一無)我怎樣才能在VB中做到這一點,有什麼建議?
Dim numbers As Int32() = {2, 3, 4, 7, 8, 9}
Dim noFirst As Int32() = numbers.Skip(1).ToArray()
Dim noLast As Int32() = numbers.Take(numbers.Length - 1).ToArray()
這些是LINQ方法,所以您至少需要.NET 3.5和Imports System.Linq
。
如果你不想使用LINQ;這是更高效但更不可讀的:
Dim noFirst(numbers.Length - 2) As Int32
Dim noLast(numbers.Length - 2) As Int32
Array.Copy(numbers, 1, noFirst, 0, noFirst.Length)
Array.Copy(numbers, noLast, noLast.Length)
值得添加微軟的Reactive Framework團隊的「交互式擴展」(NuGet「Ix-Main」)。你會得到更多的運營商,比如'.SkipLast(...)'等等。 – Enigmativity
是的,它是工作,如果我使用字符串,而不是數組? – TOM
@TOM:'新字符串( 「234789」 .Skip(1).ToArray())' –
給出的答案是正確的;我只是展示了另一種實現相同方式的方法,它不會受到複製開銷(通過使用ToArray
或Array.Copy
)的影響,並且在各種情況下都會很有趣。
使用(低估)ArraySegment結構(這基本上是一個指向原始數組的起始偏移和計數)
Dim numbers = { 2, 3, 4, 7, 8, 9 }
Dim exceptFirst = New ArraySegment(Of Int32)(numbers, 1, numbers.Length - 1)
Dim exceptLast = New ArraySegment(Of Int32)(numbers, 0, numbers.Length - 1)
作爲一個側面說明,只要保持在本心變化陣列將是可見的從ArraySegment(因爲它只是一個圍繞它的包裝)
所以要清除值,然後串聯的2個陣列? –
no ..我只想清除值並顯示在一個循環中。 – TOM