C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[4]: 入れ子配列をクローンコピーするメソッド


(過去ログ 170 を表示中)

[トピック内 6 記事 (1 - 6 表示)]  << 0 >>

■97914 / inTopicNo.1)  入れ子配列をクローンコピーするメソッド
  
□投稿者/ 大塚 (1回)-(2021/08/07(Sat) 18:10:29)

分類:[.NET 全般] 

VBに関する質問です。



Dim aaa(5)() As PointF

のような入れ子配列を


Dim bbb()() As PointF = aaa.Clone

のようにしてクローンコピーしたいのですが
普通の配列と違って参照渡しになってしまい
配列bbbを編集するとaaaも同時に変化してしまいます。


自分で、




    <Extension()>
    Public Function NestArrayClone(ByVal target()() As PointF) As PointF()()

        Dim result(target.Length - 1)() As PointF

        For i = 0 To target.Length - 1

            If target(i) IsNot Nothing Then

                result(i) = CType(target(i).Clone, PointF())

            End If

        Next i

        Return result

    End Function

のようなメソッドを作ってはみたのですが、
これって標準のメソッドでは用意されていないのでしょうか?





引用返信 編集キー/
■97915 / inTopicNo.2)  Re[1]: 入れ子配列をクローンコピーするメソッド
□投稿者/ WebSurfer (2312回)-(2021/08/07(Sat) 18:34:44)
No97914 (大塚 さん) に返信

> 普通の配列と違って参照渡しになってしまい

普通に配列は参照型だと思いますけど、質問者さんの言う「普通の配列」とは何でしょう?
引用返信 編集キー/
■97916 / inTopicNo.3)  Re[2]: 入れ子配列をクローンコピーするメソッド
□投稿者/ 大塚 (2回)-(2021/08/07(Sat) 18:42:13)
例えば、

Dim aaa(5) As PointF

のような普通の配列を


Dim bbb() As PointF = Ctype(aaa.Clone, PointF())

というクローンコピーなら値渡しにできるので、
入れ子配列も同じように値渡しでクローンコピーが用意されていないか
お聞きしたかったのですが。
ご存じないでしょうか?


引用返信 編集キー/
■97917 / inTopicNo.4)  Re[3]: 入れ子配列をクローンコピーするメソッド
□投稿者/ Hongliang (1187回)-(2021/08/07(Sat) 20:30:51)
2021/08/07(Sat) 20:33:00 編集(投稿者)

> 入れ子配列
Microsoftはジャグ配列と呼んでいるようです。

> 値渡しでクローンコピー
.NETでは値渡し・参照渡しは関数の引数に渡すときに使う言葉です。
このような場合、値のコピー・参照のコピーというのが妥当かと思います。
また、参照型が持つ参照型(が持つ...以下略)をすべて値コピーすることを指して、ディープコピーという用語があります(反対語はシャローコピー)。

さて、私のそれなりの経験上ジャグ配列自体そんな使わないし、さらにそれをコピーする必要が出てきたことは記憶にある限り1回もないので、ジャグ配列のディープコピーってのはあんまり需要がないんじゃないでしょうか。
今となっては以下のようなコードで簡単にディープコピーを記述できるので、専用のメソッドを用意する必要もないかなと。
' 次元数2で、配列要素型は値型である前提。
Dim ccc = bbb.Select(Function(b) b?.ToArray()).ToArray()
引用返信 編集キー/
■97918 / inTopicNo.5)  Re[3]: 入れ子配列をクローンコピーするメソッド
□投稿者/ WebSurfer (2313回)-(2021/08/07(Sat) 21:33:57)
No97916 (大塚 さん) に返信

> ご存じないでしょうか?

残念ながら分かりません。お役に立てずすみませんが、他の方の回答をお待ちください。
引用返信 編集キー/
■97920 / inTopicNo.6)  Re[4]: 入れ子配列をクローンコピーするメソッド
□投稿者/ 大塚 (4回)-(2021/08/09(Mon) 12:00:47)
ありがとうございます。
解決しました。

解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -