2020年09月25日
川俣晶の縁側ソフトウェアC# コーディング How Tototal 1144 count

【入門級】配列を複製する4つの方法

Written By: 川俣 晶連絡先

配列の複製はどうするか §

 配列そのものを複製する方法はいろいろあります。

 サンプルソースには4つの方法を紹介しています。

 正攻法はもう1つ配列を作ってから値をコピーしています。全ての値をコピーするためにループが必要です。

 Copy法はCopyメソッドで値の複写を一括で行う方法です。ループは要らなくなります。

 Clone法はCloneメソッドでオブジェクトの複製を作ります。しかしキャストが必要です。

 ToArray法はLINQが使える場合は最も簡単です。一般的にToArrayメソッドは列挙型を配列に置き換えるメソッドとして使われますが、配列に対して使うと同じ内容で新しい配列を作ってくれます。配列も列挙型の一種として振る舞うからです。

罠の数々 §

  • 配列を代入しても配列への参照が複製されるだけで配列は増えません!
  • 参照型オブジェクトの配列の場合、参照が増えるだけで参照されたオブジェクトまで複製されるわけではない。増えるのは配列だけである。

参考リンク §

Array.Copy メソッド

Array.Clone メソッド

Enumerable.ToArray<TSource>(IEnumerable<TSource>) メソッド

 なぜ、Cloneメソッドを使ったときだけキャストが必要なのだろうか。上記のリンクから理由と確かめてみよう。

 また、上記のリンクをから、同じArrayクラスなのにCopyメソッドでキャストは要らなかった理由を考えてみよう。

リポジトリ §

https://github.com/autumn009/cshowto

ArrayDuplicate §

using System;

using System.Linq;

class Program

{

    static void Main()

    {

        // 元データ

        int[] array1 = { 1, 2, 3 };

        // 正攻法

        int[] array2 = new int[array1.Length];

        for (int i = 0; i < array1.Length; i++) array2[i] = array1[i];

        Console.WriteLine($"array2={array2[0]},{array2[1]},{array2[2]}");

        // Copy法

        int[] array3 = new int[array1.Length];

        Array.Copy(array1, array3, array1.Length);

        Console.WriteLine($"array3={array3[0]},{array3[1]},{array3[2]}");

        // Clone法

        int[] array4 = (int[])array1.Clone();

        Console.WriteLine($"array4={array4[0]},{array4[1]},{array4[2]}");

        // ToArray法

        int[] array5 = array1.ToArray();

        Console.WriteLine($"array5={array5[0]},{array5[1]},{array5[2]}");

    }

}

実行結果

array2=1,2,3

array3=1,2,3

array4=1,2,3

array5=1,2,3

Facebook

COOL C# CREW

C#ハウツー連載の解説増量、カラーのソース、新規書き下ろし追加の読みやすい単行本はこちら。

C#ハウツー: 逆引き入門・こんな機能はどう書くの?
キーワード【 川俣晶の縁側ソフトウェアC# コーディング How To
【C# コーディング How To】の次のコンテンツ
2020年
09月
26日
【入門級】1文字なのにLengthプロパティが2になる文字がある
3days 0 count
total 1503 count
【C# コーディング How To】の前のコンテンツ
2020年
09月
24日
【入門級】2次元配列と配列の配列(ジャグ配列)は似ているが違う
3days 0 count
total 2123 count

このコンテンツを書いた川俣 晶へメッセージを送る

[メッセージ送信フォームを利用する]

メッセージ送信フォームを利用することで、川俣 晶に対してメッセージを送ることができます。

この機能は、100%確実に川俣 晶へメッセージを伝達するものではなく、また、確実に川俣 晶よりの返事を得られるものではないことにご注意ください。

このコンテンツへトラックバックするためのURL

https://mag.autumn.org/tb.aspx/20200925085903
サイトの表紙【C# コーディング How To】の表紙【C# コーディング How To】のコンテンツ全リスト 【C# コーディング How To】の入手全リスト 【C# コーディング How To】のRSS1.0形式の情報このサイトの全キーワードリスト 印刷用ページ

管理者: 川俣 晶連絡先

Powered by MagSite2 Version 0.36 (Alpha-Test) Copyright (c) 2004-2021 Pie Dey.Co.,Ltd.