Existiert der Index des Arrays?

84

Ich habe bei der Arbeit Code geerbt, der wirklich schlecht riecht. Ich hoffe, die schmerzloseste Lösung zu finden.

Gibt es eine Möglichkeit zu überprüfen, ob eine beliebige Zahl ein gültiges Element in einem Array ist?

Beispiel - Ich muss überprüfen, ob Array [25] vorhanden ist.

Am liebsten würde ich dies tun, ohne foreach () durch das Array zu führen, um die Zeilen zu finden.

Gibt es eine Möglichkeit, dies zu tun, oder stecke ich mit jeder Schleife fest?

Splatto
quelle
Meinst du, du willst wissen, ob ein Wert für Array [x] == 25 ist? Ich denke, Sie verwirren die Leute darüber, wonach Sie fragen, indem Sie fragen, ob Array [25] existiert. Sicherlich existiert es, wenn das Array 26 oder mehr Elemente enthält, aber ich denke nicht, dass Sie danach fragen.
Kevin 42
Das Programm, in dem ich arbeite, hat zwei mögliche Arrays mit demselben Dateinamen. Einer hat 21 Elemente und der andere hat 30 etwas. Ich brauche den Wert bei Array [25], falls er existiert.
Splatto

Antworten:

140

Testen Sie die Länge

int index = 25;
if(index < array.Length)
{
    //it exists
}
Eoin Campbell
quelle
3
Vielen Dank. Ich kann nicht glauben, dass ich nicht an die .Length-Eigenschaft gedacht habe!
Splatto
11
Stellen Sie sicher, dass auch index> = 0 ist.
Andreas Grech
2
Und stellen Sie sicher, dass das Array selbst nicht null ist :)
Shimmy Weitzhandler
1
Da Array-Indizes in C # sequentiell sein müssen, ist dies der Fall. Es gibt Auflistungstypen ohne sequentielle Indizes, aber diese sind keine grundlegenden Array-Typen in C #.
Reor
96

Sie können LINQ auch verwenden, um dies zu erreichen:

var exists = array.ElementAtOrDefault(index) != null;
Shimmy Weitzhandler
quelle
3
Danke, das ist es, wonach ich gesucht habe, anstatt die ungeschickte Array-Längenprüfung.
Starceaker
6
Kleinere Anmerkung, new object[]{ null }.ElementAtOrDefault(index)wird zurückgegeben, nullda das Element bei 0 ist null . Die Verwendung ElementAtOrDefaultist keine gute Lösung, um zu überprüfen, ob Array-Indizes vorhanden sind. Diese am Ende hinzugefügte Gleichheitsprüfung macht die Ergebnisse unbestimmbar.
Chris Marisic
@ChrisMarisic Kannst du bitte ein Beispiel geben?
FMFF
2
@ChrisMarisic Sie haben Recht, falls Sie nur auf Existenz prüfen möchten array.Length > index.
Shimmy Weitzhandler
2
@ ChrisMarisic, eigentlich ist dies ein wichtiger Hinweis, Lösungen wie diese werden zu versteckten Fehlern führen
amd
21

Was genau meinst du mit "ist ein gültiges Element"? Sie könnten einfach tun:

if (array.Length >= 26)

Dies würde Ihnen sagen, ob 25 ein gültiger Index für das Array ist oder nicht (unter der Annahme einer unteren Untergrenze von 0).

Wenn Sie wissen möchten, ob es nicht null ist oder nicht, verwenden Sie einfach:

if (array[25] != null)

(oder eine Kombination aus beiden).

Wenn dies nicht hilft, geben Sie bitte eine genauere Bedeutung von "gültig" für Ihr Problem an.

Jon Skeet
quelle
3
Zum zweiten Beispiel habe ich das bekommen. Index was outside the bounds of the array
Muhammad Raheel
4
@raheel: Nun, dann klingt es so, als hätten Sie stattdessen den ersten Test verwenden sollen ...
Jon Skeet
11

Angenommen, Sie möchten auch überprüfen, ob das Element nicht null ist

if (array.Length > 25 && array[25] != null)
{
    //it exists
}
Martin Harris
quelle
1
Hinweis: Got verwenden , &&in if (array.Length > 25 && array[25] != null), wenn Sie nur mit einer &wird IndexOutOfRange Ausnahme auslösen. MSDN .
Prüfsumme
3
// I'd modify this slightly to be more resilient to a bad parameter
// it will handle your case and better handle other cases given to it:

int index = 25;

if (index >= 0 && index < array.Length)
{
    // Array element found
}
theJerm
quelle
1

Sie können die Länge des Arrays verwenden und prüfen, ob Ihre beliebige Zahl in diesen Bereich passt. Wenn Sie beispielsweise ein Array der Größe 10 haben, ist Array [25] nicht gültig, da 25 nicht kleiner als 10 ist.

Jean
quelle
1

Sie können lieber eine Liste verwenden, um die Existenz zu überprüfen.

List<int> l = new List<int>();
l.Add(45);
...
...

if (l.Count == 25) {
  doStuff();
}
int num = 45;
if (l.Contains(num)) {
  doMoreStuff();
}
Jhonny D. Cano -Leftware-
quelle
1

array.length Hier erfahren Sie, wie viele Elemente sich in einem Array befinden

Mike Miller
quelle
0

Sie können überprüfen, ob der Index kleiner als die Länge des Arrays ist. Dies prüft nicht auf Nullen oder andere ungerade Fälle, in denen dem Index ein Wert zugewiesen werden kann, der jedoch nicht explizit angegeben wurde.

JB King
quelle
0

Sie können die Länge des Arrays überprüfen, um festzustellen, ob Element 25 im Sinne des Arrays gültig ist. Dann können Sie es verwenden

if (array.Length > 25)
{ 
   if (array[25] != null)
   {
       //good
   }
}

um zu sehen, ob das Array-Element selbst festgelegt wurde.

Colin Desmond
quelle
0

Es hört sich sehr danach an, als würden Sie ein Array zum Speichern verschiedener Felder verwenden. Dies ist definitiv ein Code-Geruch. Ich würde es vermeiden, Arrays so oft wie möglich zu verwenden, da sie im Allgemeinen nicht für Code auf hoher Ebene geeignet sind (oder benötigt werden).

Der Wechsel zu einem einfachen Wörterbuch kann kurzfristig eine praktikable Option sein. Wie bei der Verwendung einer großen Eigenschaftstaschenklasse. Es gibt viele Möglichkeiten. Das Problem, das Sie jetzt haben, ist nur ein Symptom für schlechtes Design. Sie sollten versuchen, das zugrunde liegende Problem zu beheben, anstatt nur das schlechte Design zu patchen, damit es vorerst irgendwie funktioniert.

Keil
quelle