Vse o Programiranju 3

Preveč prostora v tabeli

Preveč prostora v tabeli

od Matija Lokar -
Število odgovorov: 0

Zanima me kako se najlažje spoprijeti s problemom, ko si v tabeli rezerviramo »preveč« prostora? Pojavi se namreč težava, ko iteriramo po njej, saj dobivamo (pri izpisu naprimer) prazne vrstice. 

Klasična rešitev je ta, da vodimo še spremenljivko, ki pove dejansko zapolnjenost tabele, Torej:

int ind_prvega_praznega = 0
string[] vrstice = new string[100];

Seveda moramo potem paziti, da ustrezno popravljamo ind_prvega_praznega. 

========================

Mimogrede - rekel sem, da nam pri tabelah iz Pythona manjka "rezanje". Pa ni tako.
Od C# 8.0 dalje lahko napišemo npr.

int[] vals = { 1, 2, 3, 4, 5, 6, 7 };
int[] vals2 = vals[1..5];

ali pa

Index i1 = 3;  // number 3 from beginning
Index i2 = ^4; // number 4 from end
int[] a = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
Console.WriteLine($"{a[i1]}, {a[i2]}"); // "3, 6"

var slice = a[i1..i2]; // { 3, 4, 5 }
Še en primer
int[] array = new int[] { 1, 2, 3, 4, 5 };
int[] slice1 = array[2..^3];    // array[new Range(2, new Index(3, fromEnd: true))]
int[] slice2 = array[..^3];     // array[Range.EndAt(new Index(3, fromEnd: true))]
int[] slice3 = array[2..];      // array[Range.StartAt(2)]
int[] slice4 = array[..];       // array[Range.All]

Seveda pa gre tudi na številne druge načine (kot je "vedno" v .NET)

float[] subArray = new List<float>(myArray).GetRange(0, 8).ToArray();
# potrebujemo LINQ
byte[] arr = {1, 2, 3, 4, 5, 6, 7, 8};
var subset = arr.Skip(2).Take(2);
# ali pa
Buffer.BlockCopy() 
# ali pa 
Array.Copy()
...