Laden...

Indices ermitteln mit LINQ - entsprechend zur for-Schleife

Erstellt von Jack_AI vor 14 Jahren Letzter Beitrag vor 14 Jahren 1.090 Views
J
Jack_AI Themenstarter:in
193 Beiträge seit 2007
vor 14 Jahren
Indices ermitteln mit LINQ - entsprechend zur for-Schleife

Hallo,

eine rein theoretische Frage: Ich möchte mit LINQ herausfinden, welche Elemente eines Arrays eine bestimmte Bedingung erfüllen und dazu die Indices derjenigen Elemente bekommen. Mit anderen Worten, gibt es eine Entsprechung zu diesem Code


          List<int> Indices = new List<int>();

          for (int i = 0; i < DataArray.Count; i++)
          {
            if (DataArray[i] == "irgendwas")
            {
              Indices.Add(i);
            }
          }

in LINQ?

Danke,
Jack

2.891 Beiträge seit 2004
vor 14 Jahren

Hallo Jack_AI,

es gibt ja die List(T).IndexOf-Methode (T).
EDIT: Hm, wird aber bei deiner List<string> nicht funktionieren, wenn mehrere gleiche Strings (die du suchst) drin sind...

Gruß,
dN!3L

946 Beiträge seit 2008
vor 14 Jahren
6.911 Beiträge seit 2009
vor 14 Jahren

Hallo,

geht schon aber ob das von Vortiel ist weiß ich nicht:

Beispiel:

List<string> stringList = new List<string>
{
	"a", "b", "a", "c"
};

List<int> indices =
	stringList
	.Select((s, i) => new { s = s, i = i })
	.Where(tmp => tmp.s == "a")
	.Select(tmp1 => tmp1.i)
	.ToList();

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

946 Beiträge seit 2008
vor 14 Jahren

Da ist aber die (modifizierte) Linq-Variante aus meinem Link eleganter:

var indices =
   (from s in numbers
    where s == "irgendwas"
    select s).ToList();

mfg
SeeQuark

6.911 Beiträge seit 2009
vor 14 Jahren

Da ist aber die (modifizierte) Linq-Variante aus meinem Link eleganter:

Eleganter schon liefert aber nicht das gewünschte Ergebnis - die Indizes.

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

946 Beiträge seit 2008
vor 14 Jahren

Stimmt. Hab ich übersehen.
Danke fürs korrigieren.

mfg
SeeQuark

J
Jack_AI Themenstarter:in
193 Beiträge seit 2007
vor 14 Jahren

Danke bisher!

@dN!3L:

Toll, die Methode war mir noch gar nicht bewusst! Vielleicht hilft sie mir an einer anderen Stelle weiter. Für dieses Problem jedoch, wie du auch erkannt hast, hilft sie mir leider nicht. Trotzdem danke für den Hinweis.

@SeeQuark:

Ich verstehe leider nicht, wie mir das Beispiel weiterhelfen soll. In dem Beispiel werden alle Zahlen, die kleiner als 5 sind, ausgegeben. Mich würden aber die Indices, also die Positionen im Array, interessieren. Auch dein Beispiel hier im Forum gibt nur die Elemente an sich aus, aber nicht den Index der Elemente.

@gfoidl:

Okay, das beantwortet meine Frage und erhärtet meinen Verdacht, dass es keine so einfache Lösung gibt.

Nochmals danke 😃

edit: Ihr seid zu schnell. Das meiste in meinem Beitrag wurde jetzt schon gesagt. Egal, ich schick's trotzdem ab. 😉

5.299 Beiträge seit 2008
vor 14 Jahren

Um auf die Frage zurück zukommen:
Ich glaub nicht, oder nur unter Krämpfen.
Linq basiert auf IEnumerable<T>, weiß also von Indizees prinzipiell nix.

Der frühe Apfel fängt den Wurm.