Duomenų struktūros: masyvai
Pamokos turinys
- Prisimenam praeitą pamoką
- Masyvų kūrimas
- Masyvų narių naudojimas
- Algoritmai su masyvais, standartinis
for
ciklas
Pradinis kodas
Geriausia susikurti naują C# failą ir pavadinti Class6.cs
using UnityEngine;
using UnityEditor;
public class Class6 : MonoBehaviour {
[MenuItem("MyMenu/Class6")]
static void Main()
{
Debug.Log("Class6 Main()");
}
}
Masyvų sukūrimas
Kūrimas nurodant masyvo ilgį
Masyvai yra kintamieji, turintys tam tikrą tipą (float int bool string
) bei fixuotą narių skaičių.
float[] numbers = new float[5];
Debug.Log(numbers[0]);
Šitaip sukuriamas penkių realių skaičių masyvas. Kadangi įprastinė (default) vertė yra 0, tai konsolėje bus parašomas 0. Masyvų nariai yra numeruojami (indexuojami) kaip vokiečių ar anglų numeruojami namų aukštai: pirmas narys yra nulintas, antras narys yra nurodomas vienetu.
float[] numbers = new float[5];
Debug.Log(numbers[5]); // Index out of bounds exception (bandoma pasiekti narį už ribų)
Kaip ir anot vokiečių ar amerikiečių penkių aukštų namas neturi penkto aukšto, taip ir penkių narių masyvas neturi penkto nario.
Kūrimas nurodant masyvo narius
Masyvus galima sukurti ir nurodant visus pradinius narius:
int[] numbers = { 5, 3, 100 };
Debug.Log(numbers[0]); // 5
Debug.Log(numbers[1]); // 3
Debug.Log(numbers[2]); // 100
Debug.Log(numbers[3]); // Index out of bounds exception (bandoma pasiekti narį už ribų)
Masyvų nariai
Masyvų nariai elgiasi taip pat kaip ir įprasti kintamieji:
int a = 5;
int b = 3;
int[] ab = { 5, 3 };
Debug.Log("Sandauga: " + (a * b));
Debug.Log("Sandauga: " + (ab[0] * ab[1]));
// Abu atspausdina 15;
b = a + 6;
ab[1] = ab[0] + 6;
Debug.Log("b: " + b);
Debug.Log("b: " + ab[1]);
// Abu atspausdina 11;
a++;
ab[0]++;
Debug.Log("a: " + a);
Debug.Log("a: " + ab[0]);
// Abu atspausdina 6;
Algoritmai su masyvais
Masyvo ilgio nustatymas
Kuriant masyvus antruoju metodu su daug narių, iš karto gali nebūti aišku kiek narių yra sąraše, arba kitaip tariant: koks yra masyvo ilgis? Mūsų laimei masyvo ilgis yra lengvai sužinomas skaičius:
int[] numbers = { 5, 3, 100, 7, 13, 5, 0, 2, 6 };
Debug.Log("Masyvo ilgis: " + numbers.Length); // 9
Dinamiškas masyvo nario “pasiekimas”
Masyvo ilgis yra sveikas skaičius (int
), o prisimenant analogiją su namų aukštais, namo aukštas taip pat yra sveikas skaičius. Masyvo narį galima “pasiekti” ir naudojant kitą kintamąjį:
int[] numbers = { 5, 3, 100, 7, 13, 5, 0, 2, 6 };
int index = 2;
Debug.Log(numbers[2]); // 100
Debug.Log(numbers[index]); // 100
index = 50;
Debug.Log(numbers[index]); // Index out of bounds exception (bandoma pasiekti narį už ribų)
Standartinis for
ciklas: “iteravimas” per visus masyvo elementus
Sudėjus praeitus du faktus galima sukonstruoti for
ciklą, kuris “iteruoja” per visus narius:
int[] numbers = { 5, 3, 100, 7, 13, 5, 0, 2, 6 };
for (int i = 0; i < numbers.Length; i++) {
Debug.Log(numbers[i]); // 5, 3, 100, 7, 13, 5, 0, 2, 6
}
Nesunkiai galima gauti sumą:
int[] numbers = { 5, 3, 100, 7, 13, 5, 0, 2, 6 };
int sum = 0;
for (int i = 0; i < numbers.Length; i++) {
sum += numbers[i];
}
Debug.Log("Suma: " + sum);
Savarankiškos užduotys
int[] numbers = {1, 7, 5, 8, 20, 4, 17};
int sum = 0; // Suma pradedama nuo nulio
int min = numbers[0]; // Pirmas mažiausio skaičiaus spėjimas
int max = numbers[0]; // Pirmas mažiausio skaičiaus spėjimas
float avg = 0; // Vidurkis yra realus skaičius
int mul = 1; // Sandaugai pradedam nuoą vieneto, nes pradėjus nuo nulio sandauga gaunasi nulinė
int count = 0; // Jeigu skaičiuojam tik lyginius skaičius, reikia patiems nustatyti narių skaičių
Turint pradinius skaičius masyve numbers
apskaičiuoti jų sumą, mažiausią narį, didžiausią narį, vidurkį ir sandaugą.
Apskaičiuoti tas pačias vertes ignoruojant nelyginius skaičius. Papildomai suskaičiuoti lyginių skaičių kiekį (count
).
Rezultatai skaičiuojant su visais skaičiais
- Sum: 62
- Min: 1
- Max: 20
- Avg: 8.857142
- Mul: 380800
- Count: 7
Rezultatai skaičiuojant tik su lyginiais skaičiais
- Sum: 32
- Min: 4
- Max: 20
- Avg: 10.66667
- Mul: 640
- Count: 3