2015-06-01 55 views
2

我有一個數組,其中包含隨機整數,如{2,3,4,7,8,9}。我必須找回2個陣列像下面包含:如何從數組中刪除第一個或最後一個項目並創建新的數組?

  • {2,3,4,7,8}(刪除最後一個沒有)
  • {3,4,7,8,9}(除去第一無)

我怎樣才能在VB中做到這一點,有什麼建議?

+0

所以要清除值,然後串聯的2個陣列? –

+0

no ..我只想清除值並顯示在一個循環中。 – TOM

回答

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

值得添加微軟的Reactive Framework團隊的「交互式擴展」(NuGet「Ix-Main」)。你會得到更多的運營商,比如'.SkipLast(...)'等等。 – Enigmativity

+0

是的,它是工作,如果我使用字符串,而不是數組? – TOM

+1

@TOM:'新字符串( 「234789」 .Skip(1).ToArray())' –

2

給出的答案是正確的;我只是展示了另一種實現相同方式的方法,它不會受到複製開銷(通過使用ToArrayArray.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(因爲它只是一個圍繞它的包裝)

相關問題