Entwickler-Ecke

C# - Die Sprache - Anzahl Elemente Array


sharpx - Mo 05.01.09 10:56
Titel: Anzahl Elemente Array
Ich würde gerne die anzahl der belegten elemente eines arrays herausbekommen.
mit c++ geht das über sizeof(array)/sizeof(datentyp);

die funktion array.length() gibt mir nur ALLE elemente zurück, jeodch sollten nur die elemente, die auch belegt sind zurückgegeben werden.

definiert ist ein string array:
string[] arr = new string[10];

davon sind zwischen 5-8 elemente belegt, und ich sollte herausfinden wie viel davon nun belegt sind.


danke für die hilfe!


JüTho - Mo 05.01.09 11:02

Hallo,

eine vorgegebene Methode oder Eigenschaft gibt es offensichtlich nicht, wie im Index zur Array-Klasse in der SDK-Doku/MSDN nachzulesen ist.

Du musst also eine einfache Schleife selbst schreiben (hier in Pseudo-Code, damit Du selbst noch etwas nachdenken musst):

Quelltext
1:
2:
3:
4:
Zähler vorbelegen
foreach(item in array)
   if (item belegt)
       Zähler++


Gruß Jürgen


sharpx - Mo 05.01.09 11:05

das dachte ich mir auch schon.
aber mir war unklar wie ich prüfen kann ob ein elemente belegt ist?

danke für die hilfe


sharpx - Mo 05.01.09 11:10

Was natürlich klappt ist:


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
for (int i = 0; i < st.Length; i++)
{
        try
  {
    if (st[i].Length > 1)
    {
      Console.WriteLine(i);
    }
  }
  catch
  {
          
  }
}


Finde diese Möglichkeit aber unsauber und nicht wirklich schön.
Außerdem stürzt mir dabei immer SharpDevelop ab - Ausnahmefehler im Programm. Liegt wohl an st.Length.

Hättest du mir ne Möglichkeit wie ich prüfen kann ob ein Element belegt ist?




EDIT:
Okay C# ist sehr simpel :=)
Hab das jetzt so gelöst:


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
public static int get_clogged_elements (string[] arr)
    {
      int counter = 0;
      for (int i = 0; i < arr.Length-1; i++)
      {
        if (arr[i] != null)
          counter++;  
      }
      return counter;
    }




EDIT2:
Hast mir wohl grad geantwortet, als ich geantwortet habe :)

Moderiert von user profile iconChristian S.: Code- durch C#-Tags ersetzt


JüTho - Mo 05.01.09 11:15

Bei einem String ist die richtige Abfrage:

C#-Quelltext
1:
if (String.IsNullOrEmpty(st[i]))                    

Allgemein wäre es so zu machen:

C#-Quelltext
1:
if (items[i] != null)                    

Deine Lösung klappt doch gar nicht:
user profile iconsharpx hat folgendes geschrieben Zum zitierten Posting springen:
Ausnahmefehler im Programm.

Es liegt daran, dass st[i] null ist, also Length gar nicht bestimmt werden kann.

Jürgen


miniC# - Mo 05.01.09 20:43

verwende doch eine List<T>, die unterscheidet von hause aus zwischen Count und Capacity.