2010-12-07 1 views

Répondre

8

Utilisation de la surcharge de Select qui comprend l'indice:

var highIndexes = list.Select((value, index) => new { value, index }) 
         .Where(z => z.value > 10) 
         .Select(z => z.index); 

Les étapes successivement:

  • projet la séquence de valeurs en une suite de valeur/paires d'index
  • Filtre pour inclure uniquement les paires dont la valeur est supérieure à 10
  • projet le résultat d'une séquence d'indices
+0

Skeet @ Jon merci pour votre réponse est-il possible de retrive deux colonnes (comme nous récupérons la base de données) en utilisant LINQ – ratty

+0

@ratty, Il peut être fait par sélectionner, lire 101 échantillons linq (google il) pour comprendre. –

+0

@saeed, savez-vous un lien particulier pour cela – ratty

1
public static List<int> FindIndexAll(this List<int> src, Predicate<int> value) 
    { 
     List<int> res = new List<int>(); 
     var idx = src.FindIndex(x=>x>10);   
     if (idx!=-1) { 
     res.Add(idx); 
     while (true) 
     { 
      idx = src.FindIndex(idx+1, x => x > 10); 
      if (idx == -1) 
       break; 
      res.Add(idx); 
     } 
     } 
     return res; 
    } 

Utilisation

 List<int> test= new List<int>() {1,10,5,2334,34,45,4,4,11}; 
     var t = test.FindIndexAll(x => x > 10); 
+1

Cela ressemble à une façon assez compliquée de s'y prendre. Si je n'allais pas utiliser LINQ, je ferais probablement une boucle sur moi-même. Notez que votre code échouera actuellement s'il y a * no * entrées correspondant au prédicat - il mettra -1 dans la liste. –

+0

@Jon, ouais vous avez raison ... :( – RameshVel

+0

@ramesh merci pour votre réponse par le par je suis aussi chennai gars – ratty

Questions connexes