Veri depolama.

Oyuncuların dolambaçlı ve düşmanca düşmanlara karşı yarıştığı "User Hostile" adlı bir bilgisayar oyunu geliştirdiğinizi varsayalım. bilgisayar arayüzü. Şimdi bu oyunun beş yıllık periyotta aylık satışlarını takip eden bir program yazmanız gerekiyor. Ya da Hacker Hero Koleksiyon Kartlarının envanterini çıkarmanız gerektiğini varsayalım.
Çok yakında, bilgileri depolamak ve işlemek için basit temel veri türlerinden daha fazlasına ihtiyacınız olduğu sonucuna varacaksınız.

 

Diziler. Giriş.

Büyük miktarda veriyle çalışmayı kolaylaştırmak için, bir grup hücreye ortak bir değer verilir. isim. Böyle bir hücre grubuna dizi denir..
Dizi – aynı türden, yan yana yerleştirilmiş ve ortak bir isme sahip bir grup hafıza hücresidir. Gruptaki her hücrenin benzersiz bir numarası vardır.

Dizilerle çalışırken öğrenmeniz gereken üç şey vardır:
X dizi için gerekli boyutta bellek ayırın;
X istenen hücreye veri yaz;
X bir hücreden veri okuma.

Bir dizi oluşturun.

Bir dizi oluştururken bellekte yer ayrılır (belirli sayıda hücre).
1) Diziler, yalnızca öğeleri numaralandırarak oluşturulabilir:
int[] sayı = < kod>yeni int[] { 1, 2, 3, 5 };

int  , dizideki tüm nesnelerin tamsayı olduğu anlamına gelir.  int  yerine başka herhangi bir veri türü olabilir. Örneğin,
string[] isimler = ["Vasya", "Peter", "Fedya"];

2) Dizi değerlerini hemen belirleyemeyiz, sadece ihtiyacımız olan uzunlukta bir dizi oluşturalım.
int[] nums = new int[4];
3) Bir dizi her zaman "bilir" senin bedenin a dizisinin boyutu şu şekilde bulunabilir:
a.Length;
Genellikle dizinin boyutu ayrı bir değişkende saklanır, böylece program farklı bir dizi boyutuyla çalışacak şekilde kolayca değiştirilebilir. Örnek:
int N = 10; // dizinin boyutunu N değişkeninde sakla
int[] sayılar = yeni int[4]; // N boyutunda bir dizi oluştur
Console.Write(sayılar.Uzunluk); // dizinin boyutunu göster
Dizinin boyutu klavyeden ayarlanabilir.

Bir dizi öğesine gönderme.

Dizilerin kullanışlılığının çoğu, öğelerine ayrı ayrı erişilebilmesinden gelir.
Bunu yapmanın yolu, öğeleri numaralandırmak için bir dizin kullanmaktır.
Dizin , belirli bir dizi öğesine işaret eden bir değerdir.

Unutmayın: C# dizi numaralandırması sıfırdan başlar.< br />
A dizisine erişim örnekleri:
int x = (A[3] + 5) * A[1] / / A[3] ve A[1] değerlerini oku
A[0] = x + 6 // A[0]'a yeni değer yaz
Dizi öğeleriyle çalışmak için programı inceleyelim.
int i = 1;
int[] A = yeni int[5]; // 5 elemanlı bir dizi oluştur
A[0] = 23; // dizinin 5 öğesinin her birine (0'dan 4'e kadar dizinler)
A[1] = 12; // belirli bir değer yaz
A[2] = 7;
A[3] = 43;
A[4] = 51;
A[2] = A[i] + 2*A[i-1] + A[2*i]; // indeksi 2 olan elemanın değerini ifadenin sonucuna değiştir
                                 // çünkü i=1, sonra i değişkeninin değerini elde ettiğimiz ifadede değiştiriyoruz
                                // sonraki ifade A[2] = A[1] + 2*A[0] + A[2];
Console.Write((A[2] + A[4]));

Bu programın çalıştırılması sonucunda dizinin elemanlarının toplamının değeri index 2 ve index 4 ile birlikte 116 olarak ekranda görünecektir. Örnekten de görebileceğiniz gibi, dizinin herhangi bir öğesine erişebiliyoruz. Ayrıca gerekli eleman sayısını çeşitli formüller kullanarak hesaplayın (örneğin, A[i-1] veya A[2*i] programında olduğu gibi, bu durumlarda, eleman indeksleri hesaplanacak ve i değerine bağlı olacaktır.

Örnek bir programı inceleyelim.
int N = 5;
int[] A = yeni int[N];
int x = 1;
A[x + 4] = A[x] + A[2 * (x + 1)];  // ifadelerde ve hesaplamalarda x'i yerine koyduktan sonra 
                          // sonraki satırı al A[5] = A[1] + A[4]
                          // A[5] böyle bir öğe yok
                          // hata - sınırların dışında dizi

Dizi 5 öğeyle bildirilir, bu da öğelerin 0'dan 0'a kadar numaralandırılacağı anlamına gelir. 4. 6. satırdaki programın var olmayan bir elemana gönderme yaptığını görüyoruz: A[5].
Programın dizinin sınırlarını aştığı ortaya çıktı.
Dizi taşması, dizide olmayan bir dizindeki öğeye erişimdir.
Bu gibi durumlarda, program genellikle bir çalışma zamanı hatası vererek çöker.

 

Dizilerle çalışırken, genellikle dizinin tüm öğeleriyle aynı anda çalışmanız gerekir.
Elemanları tekrarla: dizinin tüm elemanlarına bakarız ve gerekirse her biri ile bazı işlemler yaparız.
Bunun için, genellikle 0 ile N-1 arasında değişen değişkenli bir döngü kullanılır, burada N  sayıdır dizi öğeleri.
N altında, dizinin mevcut boyutunu, yani
dikkate alacağız. N = A.Length;
...
için (int i = 0; i 
Belirtilen döngüde, i değişkeni değerleri alacaktır ​​0, 1, 2, ..., N-1.  Böylece, döngünün her adımında, dizinin i numaralı belirli bir öğesine erişiriz.
Yani A[i] dizisinin bir elemanı ile yapılması gerekenleri anlatmak ve bu işlemleri böyle bir döngü içerisine yerleştirmek yeterlidir.

Diziyi ilk doğal sayılarla dolduran, yani programın sonunda dizinin elemanlarının eşit olması
olan bir program yazalım.
A[0] = 1
A[1] = 2
A[2] = 3
...
A[N - 1] = N
Kalıbı görmek kolaydır: Bir dizi öğesinin değeri, dizi öğesinin değerinden 1 kat büyük olmalıdır. elemanın dizini.
Döngü şöyle görünecek
için (int i = 0; i < N; i++) { A[ ben] = ben + 1; }

Dizi öğeleriyle çalışmanın ek yolları
için hariç , ayrıca foreach - dizin kullanmadan dizinin tüm öğeleri üzerinde yinelenir. Bazen, örneğin ekranda bir dizi görüntülemek uygun olabilir.   foreach(int i in A) { Console.Write(i + ""); }
İşte elemanları bir satıra yazılan ve boşluklarla ayrılmış bir diziyi bu şekilde klavyeden okuyabilirsiniz. System.Linq kullanarak; // dizilerle çalışmakla ilgili fonksiyonları kullanabilmek için bu yönergeyi yazmanız gerekiyor ... string metin = Console.ReadLine(); int[] dizi = text.Split(' ').Select(int.Parse).ToArray(); // Split(), dizgiyi ayrı nesnelere böler (bu durumda boşluk bölümü) // Select(int.Parse) her nesneyi (dize) bir int'ye dönüştürür // ToArray() alınan tüm nesneleri diziye yazar