Autor Beitrag
sharpx
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 51



BeitragVerfasst: Mo 05.01.09 10:56 
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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: 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):
ausblenden Quelltext
1:
2:
3:
4:
Zähler vorbelegen
foreach(item in array)
   if (item belegt)
       Zähler++


Gruß Jürgen
sharpx Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 51



BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 51



BeitragVerfasst: Mo 05.01.09 11:10 
Was natürlich klappt ist:

ausblenden 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:

ausblenden 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


Zuletzt bearbeitet von sharpx am Mo 05.01.09 11:19, insgesamt 2-mal bearbeitet
JüTho
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2021
Erhaltene Danke: 6

Win XP Prof
C# 2.0 (#D für NET 2.0, dazu Firebird); früher Delphi 5 und Delphi 2005 Pro
BeitragVerfasst: Mo 05.01.09 11:15 
Bei einem String ist die richtige Abfrage:
ausblenden C#-Quelltext
1:
if (String.IsNullOrEmpty(st[i]))					

Allgemein wäre es so zu machen:
ausblenden 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#
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 75

Wiin XP Home
C# VS Express 2008
BeitragVerfasst: Mo 05.01.09 20:43 
verwende doch eine List<T>, die unterscheidet von hause aus zwischen Count und Capacity.

_________________
Zitat MDSN : " ... C# (gesprochen: "si scharp") " :D