Solidity-arrays

提供:Dev Guides
移動先:案内検索

堅牢性-配列

配列は、同じタイプの要素の固定サイズの順次コレクションを格納するデータ構造です。 配列はデータのコレクションを格納するために使用されますが、配列を同じタイプの変数のコレクションと考える方が便利な場合がよくあります。

number0、number1、…​、number99などの個々の変数を宣言する代わりに、numbersなどの1つの配列変数を宣言し、numbers [0]、numbers [1]、…​、numbers [99]を使用して表現します個々の変数。 配列内の特定の要素は、インデックスによってアクセスされます。

Solidityでは、配列はコンパイル時の固定サイズでも動的サイズでもかまいません。 ストレージアレイの場合、さまざまなタイプの要素を使用することもできます。 メモリ配列の場合、要素タイプはマッピングできません。関数パラメーターとして使用する場合、要素タイプはABIタイプである必要があります。

すべての配列は、連続したメモリ位置で構成されています。 最下位アドレスは最初の要素に対応し、最上位アドレスは最後の要素に対応します。

配列の宣言

Solidityで固定サイズの配列を宣言するために、プログラマは次のように配列に必要な要素のタイプと要素の数を指定します-

type arrayName [ arraySize ];

これは、単一次元配列と呼ばれます。 arraySize はゼロより大きい整数定数でなければならず、 type は有効なSolidityデータ型であればどれでもかまいません。 たとえば、タイプuintのバランスと呼ばれる10要素の配列を宣言するには、このステートメントを使用します-

uint balance[10];

Solidityで動的なサイズの配列を宣言するには、プログラマは次のように要素のタイプを指定します-

type[] arrayName;

配列の初期化

あなたはSolidity配列要素を1つずつ、または次のように単一のステートメントを使用して初期化することができます

uint balance[3] = [1, 2, 3];

中括弧[]の間の値の数は、角括弧[]の間の配列に対して宣言する要素の数より大きくすることはできません。 以下は、配列の単一の要素を割り当てるための例です-

配列のサイズを省略すると、初期化を保持するのに十分な大きさの配列が作成されます。 したがって、あなたが書く場合-

uint balance[] = [1, 2, 3];

前の例で作成したのとまったく同じ配列を作成します。

balance[2] = 5;

上記のステートメントは、配列内の要素番号3 ^ rd ^に値5を割り当てます。

動的メモリ配列の作成

動的メモリ配列は、新しいキーワードを使用して作成されます。

uint size = 3;
uint balance[] = new uint[](size);

配列要素へのアクセス

配列名にインデックスを付けることにより、要素にアクセスします。 これは、配列の名前の後に角かっこ内に要素のインデックスを配置することによって行われます。 たとえば-

uint salary = balance[2];

上記のステートメントは、配列から3 ^ rd ^要素を取得し、その値を給与変数に割り当てます。 以下は、上記の3つの概念すべてを使用する例です。 配列の宣言、割り当て、アクセス-

メンバー

  • length -lengthは配列のサイズを返します。 lengthは、動的配列のサイズを変更するために使用できます。
  • push -pushを使用すると、要素を動的ストレージ配列に最後に追加できます。 配列の新しい長さを返します。

Solidityで配列がどのように機能するかを理解するには、次のコードを試してください。

pragma solidity ^0.5.0;

contract test {
   function testArray() public pure{
      uint len = 7;

     //dynamic array
      uint[] memory a = new uint[](7);

     //bytes is same as byte[]
      bytes memory b = new bytes(len);

      assert(a.length == 7);
      assert(b.length == len);

     //access array variable
      a[6] = 8;

     //test array variable
      assert(a[6] == 8);

     //static array
      uint[3] memory c = [uint(1) , 2, 3];
      assert(c.length == 3);
   }
}