| ■No91905 (えんえん さん) に返信 > 配列と同じように値を取得できませんが > どのように使用すれば良いのでしょうか?
ArraySegment は「大きな配列に対する一部の範囲のみ」を切り出した情報を管理します。 イメージとしてはこんな感じ。
Public Class ArraySegment Public Property Array As Double() '←管理対象となる配列そのものを表す
Public Property Offset As Integer 'その配列のどの位置から Public Property Count As Integer '幾つ分の要素を扱いたいのかを管理 End Class
使い方の例として:
Module Module1
Sub Main() Dim dblArray As Double() = {11, 22, 33, 44, 55, 66, 77, 88}
Dim ar1 As New ArraySegment(Of Double)(dblArray)
Console.WriteLine("=== 中身を確認 ===") Test1_Dump(ar1)
Console.WriteLine("=== 2〜5番目を切り出す ===") Dim ar2 = Test2_Slice(ar1) Test1_Dump(ar2)
Console.WriteLine("=== 0 番目と 2 番目の値を入れ替える ===") Test3_Swap(ar2) Test1_Dump(ar2)
Console.WriteLine("=== 1 番目の値を 10 倍にする ===") Test4_Modify(ar2) Test1_Dump(ar2)
Console.WriteLine("=== 元の配列はどうなったか? ===") Array.ForEach(dblArray, AddressOf Console.WriteLine)
Console.Write("*** 何かキーを押してください ***") Console.ReadKey() End Sub
'中身を列挙してみる Sub Test1_Dump(a As ArraySegment(Of Double)) Console.WriteLine("全要素数={0}", a.Array.Length) Console.WriteLine("開始位置={0}", a.Offset) Console.WriteLine("範囲の数={0}", a.Count) For Each dbl In a Console.WriteLine("... {0}", dbl) Next Console.WriteLine("----") End Sub
'相対位置指定で index +2〜+5 の位置を切り出して返す Function Test2_Slice(a As ArraySegment(Of Double)) As ArraySegment(Of Double) Return New ArraySegment(Of Double)(a.Array, a.Offset + 2, 4) End Function
'相対位置指定で index 0 と index 2 の値を入れ替える Sub Test3_Swap(a As ArraySegment(Of Double)) Dim swap0 As Double = a(0) Dim swap2 As Double = a(2) a.Array(a.Offset + 0) = swap2 a.Array(a.Offset + 2) = swap0 End Sub
'相対位置指定で index 1 の場所の値を 10 倍にする Sub Test4_Modify(a As ArraySegment(Of Double)) a.Array(a.Offset + 1) *= 10 End Sub End Module |