» »

[C#] izdelava tabele

[C#] izdelava tabele

majoneza ::

Pozdravljeni!

potreboval bi pomoč pri izdelavi tabele. V njej bi imel podatke različnih tipov. Pomislil sem že na class ali pa struct, ampak mi ne pomaga dosti, saj tako samo naredim neko novo instanco in ne morem naenkrat s for zanko preleteti vseh ki izhajajo iz recimo struct tabela.ime oziorma class tabela.ime.
Rešitev bi bila mogoče tudi array, ampak moram ostati pri istem tipu podatkov, kar pa mi ne odgovarja

KaRkY ::

To lahko rešiš z ArrayList brez generikov pač problem bo ko boš hotel pridobit nazaj podatke saj boš dobi tip Object.
When you look long into an abyss, the abyss looks into you

fiction ::

Rešitev bi bila mogoče tudi array, ampak moram ostati pri istem tipu podatkov, kar pa mi ne odgovarja

Zaradi polimorfizma ni nujno tako. Ti imas lahko recimo array zivali v katerega das psa, macko in kaco in se ti se zmeraj normalno obnasajo. Torej zival mora biti le base type od tistih drugih razredov pa je (se pravi da je class pes izpeljan iz zivali). Glede na to, da je vse object lahko to privedes do ekstrema in naredis array (ali pa kakrsnokoli podatkovno strukturo) objektov in tja noter das poljubne razlicne podatke, samo to ni ravno najbolj elegantno. Ce ne uporabljas generikov ala ArrayList<Zival> potem bo ArrayList v bistvu "hranil" objekte, cisto lahko bi pa samo rekel objecŧ[]. Problem s tem je le boxing/unboxing ter slabsi type safety. Ce ves da noter dajes samo zivali, ti ni treba narediti tako, da bos lahko dal noter se kaj drugega.

GeeDee ::

Seveda lahko z for zanko preletiš strukturo/razred. Enostaven primer, če imaš class Tabela, ki ima property string Ime:

Tabela[] tabela = new Tabela[10];

for (int i = 0; i < tabela.length; i++)
{
   tabela[i].Ime = "Majoneza";
}

majoneza ::

Uf, to ste pa malo preveč strokovni zame. Malo sem se zmedel. Torej, moj cilj je, da naredim neko strukturo, ki mi hrani seznam oseb. Vsaka oseba mora imeti ime, priimek in nek ID ( vsi trije podatki so lahko tipa string). Mora obstajati možnost, da preletim celoten seznam IDjev vsake osebe in potem iszpišem ustrezno ime osebe, ki se ujema z IDjem, ki ga iščem.
Sam sem se trudil tako:

struct oseba;
{string ime;
string priimek;
string id;
int starost;
}

Če torej hočem najti ustrezen id, ne smem enostavno primerjati oseba.id z nekim vnaprej določenim stringom.

GeeDee ::

Hm ... najboljše bi bilo, če bi bolj natančno povedal kaj oz. za kaj potrebuješ? Ali moraš rešiti nalogo z struct ali class? Ker stvar bi lahko rešil tudi z DataTable.

BlueRunner ::

@majoneza: joj, kje bi sploh začel... :|

Tip razreda je tip razreda. Tip structa je tip structa.

int, string, DateTime, ... so tipi.

Če definiraš spremenljivke int a; string s; DateTime t;, potem so a, s in t instance teh tipov.

Tako, kot si postavil vprašanje je bilo razumeti, kakor da hočeš imeti seznam v katerem so številke pomešane z nizi, pomešanimi z urami, ... in tako naprej.

Če pa imaš tip struct Oseba { ... }, kot si ga opisal zgoraj, pa lahko narediš tudi seznam instanc tega tipa. Bodisi fiksne velikosti (Oseba[] osebe = new Oseba[100];), bodisi vnaprej neznane velikosti (List<Oseba> osebe = new List<Oseba>();).

Po seznamu se lahko enostavno sprehodiš po seznamu bodisi z iteratorjem, bodisi "ročno" s števcem:
foreach (Oseba oseba in osebe) { ... }
for (int ii = 0, count = osebae.Count; ii &lt; count; ii++) { Oseba oseba = osebe[ii]; ... }


Če pa želiš najti v seznamu samo določeno osebo z natančno znano lastnostjo, pa si naredi metodo:
/* Metoda vrne instanco razreda Oseba, ki ima polje ID enako podani vrednosti ID */
/* Če takšne osebe v seznamu ni, vrne vrednost null */
Oseba NajdiOseboPoId(List<Oseba> osebe, string id) {
    foreach (Oseba oseba in osebe) {
        if (string.Equals(oseba.Id, id, StringComparison.Ordinal)) {
            return oseba;
        }
    }
    return null;
}


Če pa uporabljaš .NET Framework 3.5, pa lahko uporabiš tudi LINQ konstrukt
Oseba oseba = (from oseba in osebe where oseba.id == iskaniId select oseba).First();

Zgodovina sprememb…

majoneza ::

@ BlueRunner: Hvala za pojasnilo, kot si ža lahko opazil sem šele začetnik v c#. In ja, hočem najti vnaprej znan ID med vsemi osebami v tabeli in izpisati njeno ime. Bom poizkusil tako kot si predlagal.


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

Kako rezervirati pomnilnik za neznano stevilo nizov?

Oddelek: Programiranje
11955 (770) smacker
»

C# težava

Oddelek: Programiranje
233714 (2560) mladec
»

[C#] Deserializacija

Oddelek: Programiranje
181859 (1462) Cvenemir
»

VC# Zapis podatkov na disk

Oddelek: Programiranje
422501 (1757) matej_jack
»

Preusmeritev v C# formi

Oddelek: Programiranje
61228 (1132) OmegaM

Več podobnih tem