C#の配列をコピーする方法

Cloneメソッド

Cloneメソッドを使うと簡単に配列のコピーができます。

使い方は次のような感じです。

using System;

public class Example1
{
  static public void Main ()
  {
    string[] ar1 = { "aaa", "bbb", "ccc" };
    string[] ar2 = (string[])ar1.Clone();

    ar2[0] = "AAA";

    Console.WriteLine("ar1:");
    foreach(var e in ar1) Console.WriteLine(e);
    
    Console.WriteLine("ar2:");
    foreach(var e in ar2) Console.WriteLine(e);
  }
}

実行結果

ar1:
aaa
bbb
ccc
ar2:
AAA
bbb
ccc

多次元配列

多次元配列でも同様にCloneできます。

using System;

public class Example2
{
  static public void Main ()
  {
    string[,] ar1 = { {"aaa", "bbb"}, {"ccc", "ddd"} };
    string[,] ar2 = (string[,])ar1.Clone();

    ar2[0,0] = "AAA";

    Console.WriteLine("ar1:");
    foreach(var e in ar1) Console.WriteLine(e);
    
    Console.WriteLine("ar2:");
    foreach(var e in ar2) Console.WriteLine(e);
  }
}

実行結果

ar1:
aaa
bbb
ccc
ddd
ar2:
AAA
bbb
ccc
ddd

shallow copy

Cloneメソッドは便利ですが、deep copyではなくshallow copyになっている点には注意してください。

using System;

public class C
{
  public string s;
  public override string ToString() => s;
}

public class Example3
{
  static public void Main ()
  {
    C c = new C();
    c.s = "aaa";
	
    C[] ar1 = { c, c };
    C[] ar2 = (C[])ar1.Clone();

    ar2[0].s = "AAA";

    Console.WriteLine("ar1:");
    foreach(var e in ar1) Console.WriteLine(e);

    Console.WriteLine("ar2:");
    foreach(var e in ar2) Console.WriteLine(e);
  }
}

実行結果

ar1:
AAA
AAA
ar2:
AAA
AAA

リンク

Array.Clone Method (System) | Microsoft Docs
https://docs.microsoft.com/en-us/dotnet/api/system.array.clone?view=netcore-3.1

C#でgotoの使い方

forステートメント

C#でforの2重ループから抜けたい時、gotoステートメントを使って次のような書き方ができるみたいです。

サンプルコード

using System;

public class Example
{
  static public void Main ()
  {
    for (int i = 0; i < 5; ++i)
    {
      for (int j = 0; j < 5; ++j)
      {
        Console.WriteLine($"i={i}, j={j}");
        if (i + j > 5) goto Finish;
      }
    }

    Finish:
      Console.WriteLine("Finish");
  }
}

実行結果

i=0, j=0
i=0, j=1
i=0, j=2
i=0, j=3
i=0, j=4
i=1, j=0
i=1, j=1
i=1, j=2
i=1, j=3
i=1, j=4
i=2, j=0
i=2, j=1
i=2, j=2
i=2, j=3
i=2, j=4
Finish

switchステートメント

他にも、switchステートメントで

switch (n)
{
  case 1:
    // 実行したい内容1
    break;
  case 2:
    // 実行したい内容2
    goto case 1;
  default
    break;
}

のような書き方もできるみたいです。

慣れないと戸惑いそうですが、覚えておくと便利そうな気がします。

リンク

goto statement – C# Reference | Microsoft Docs
https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/goto

MariaDBでデータベース一覧とテーブル一覧を取得するコマンド

MariaDBで存在しているデータベースとテーブルの一覧が知りたい場合はshowコマンドを使って表示できるみたいです。

データベース一覧を表示

show databases;

テーブル一覧を表示

show tables from データベース名;

使い方は次のような感じです。

$ mysql -u username -p
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is ****
Server version: 10.2.2-MariaDB-valgrind-max-debug Source distribution

Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| wordpress          |
+--------------------+
4 rows in set (0.00 sec)

MariaDB [(none)]> show tables from wordpress;
+----------------------------+
| Tables_in_MariaDB          |
+----------------------------+
| wp_commentmeta             |
| wp_comments                |
| wp_links                   |
| wp_options                 |
| wp_postmeta                |
| wp_posts                   |
| wp_term_relationships      |
| wp_term_taxonomy           |
| wp_termmeta                |
| wp_terms                   |
| wp_usermeta                |
| wp_users                   |
+----------------------------+
12 rows in set (0.00 sec)

リンク

SHOW DATABASES – MariaDB Knowledge Base
https://mariadb.com/kb/en/show-databases/

SHOW TABLES – MariaDB Knowledge Base
https://mariadb.com/kb/en/show-tables/