Solidity - Diziler

Dizi, aynı türden öğelerin sabit boyutlu sıralı bir koleksiyonunu depolayan bir veri yapısıdır. Bir dizi, bir veri koleksiyonunu depolamak için kullanılır, ancak bir diziyi aynı türden değişkenlerin bir koleksiyonu olarak düşünmek genellikle daha kullanışlıdır.

Sayı0, sayı1, ... ve sayı99 gibi tek tek değişkenleri bildirmek yerine, sayılar gibi bir dizi değişkeni bildirir ve temsil etmek için sayılar [0], sayılar [1] ve ..., sayılar [99] kullanırsınız bireysel değişkenler. Bir dizideki belirli bir öğeye bir dizinle erişilir.

Solidity'de bir dizi, derleme zamanı sabit boyutta veya dinamik boyutta olabilir. Depolama dizisi için farklı türde öğelere de sahip olabilir. Bellek dizisi durumunda eleman tipi eşlenemez ve fonksiyon parametresi olarak kullanılması durumunda eleman tipi ABI tipi olmalıdır.

Tüm diziler bitişik bellek konumlarından oluşur. En düşük adres ilk öğeye ve en yüksek adres son öğeye karşılık gelir.

Dizileri Bildirme

Solidity'de sabit büyüklükte bir dizi bildirmek için, programcı elemanların türünü ve bir dizinin gerektirdiği eleman sayısını aşağıdaki gibi belirler -

type arrayName [ arraySize ];

Buna tek boyutlu dizi denir. arraySize sıfırdan büyük bir tamsayı sabiti olmalı ve typeherhangi bir geçerli Solidity veri türü olabilir. Örneğin, uint türünde Balance adlı 10 öğeli bir dizi bildirmek için şu ifadeyi kullanın -

uint balance[10];

Solidity'de bir dinamik boyut dizisi bildirmek için, programcı aşağıdaki gibi elemanların türünü belirler -

type[] arrayName;

Dizileri Başlatma

Solidity dizi elemanlarını tek tek veya aşağıdaki gibi tek bir ifade kullanarak başlatabilirsiniz -

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

Küme parantezleri [] arasındaki değerlerin sayısı, köşeli parantezler [] arasındaki dizi için belirttiğimiz öğelerin sayısından büyük olamaz. Aşağıda, dizinin tek bir elemanını atamak için bir örnek verilmiştir -

Dizinin boyutunu atlarsanız, başlatmayı tutacak kadar büyük bir dizi oluşturulur. Bu nedenle, yazarsanız -

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

Önceki örnekte yaptığınız gibi tam olarak aynı diziyi yaratacaksınız.

balance[2] = 5;

Yukarıdaki açıklamada atar elemanı 3 numaralı üçüncü dizide 5 bir değer.

Dinamik bellek dizileri oluşturma

Dinamik bellek dizileri yeni anahtar sözcük kullanılarak oluşturulur.

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

Dizi Öğelerine Erişim

Dizi adını indeksleyerek bir elemana erişilir. Bu, elemanın dizini dizinin isminden sonra köşeli parantez içine yerleştirilerek yapılır. Örneğin -

uint salary = balance[2];

Yukarıdaki ifade diziden 3. elemanı alacak ve değeri maaş değişkenine atayacaktır. Aşağıda, yukarıda bahsedilen üç kavramın tümünü kullanacak bir örnek verilmiştir. bildirim, atama ve dizilere erişim -

Üyeler

  • length- uzunluk, dizinin boyutunu döndürür. uzunluk, dinamik dizinin boyutunu değiştirmek için kullanılabilir.

  • push- push, sonunda dinamik bir depolama dizisine bir öğe eklemeye izin verir. Dizinin yeni uzunluğunu döndürür.

Misal

Solidity'de dizilerin nasıl çalıştığını anlamak için aşağıdaki kodu deneyin.

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);
   }
}