c# strip html - Trova l'indice di un valore in una matrice





4 Answers

Per gli array è possibile utilizzare: Array.FindIndex<T> :

int keyIndex = Array.FindIndex(words, w => w.IsKey);

Per gli elenchi è possibile utilizzare List<T>.FindIndex :

int keyIndex = words.FindIndex(w => w.IsKey);

Puoi anche scrivere un metodo di estensione generico che funzioni per qualsiasi Enumerable<T> :

///<summary>Finds the index of the first item matching an expression in an enumerable.</summary>
///<param name="items">The enumerable to search.</param>
///<param name="predicate">The expression to test the items against.</param>
///<returns>The index of the first matching item, or -1 if no items match.</returns>
public static int FindIndex<T>(this IEnumerable<T> items, Func<T, bool> predicate) {
    if (items == null) throw new ArgumentNullException("items");
    if (predicate == null) throw new ArgumentNullException("predicate");

    int retVal = 0;
    foreach (var item in items) {
        if (predicate(item)) return retVal;
        retVal++;
    }
    return -1;
}

E puoi usare anche LINQ:

int keyIndex = words
    .Select((v, i) => new {Word = v, Index = i})
    .First(x => x.Word.IsKey).Index;

Si prega di notare che questo non metterà in corto circuito il ciclo (itererà sempre sull'intera collezione) e genererà un'eccezione se la condizione non viene soddisfatta, piuttosto che restituire -1.

agility pack remove

Linq può essere usato in qualche modo per trovare l'indice di un valore in un array?

Ad esempio, questo ciclo individua l'indice chiave all'interno di un array.

for (int i = 0; i < words.Length; i++)
{
    if (words[i].IsKey)
    {
        keyIndex = i;
    }
}



Se vuoi trovare la parola che puoi usare

var word = words.Where(item => item.IsKey).First();

Questo ti dà il primo elemento per il quale IsKey è vero (se potrebbe esserci non potresti voler usare .FirstOrDefault()

Puoi ottenere sia l'oggetto che l'indice che puoi usare

KeyValuePair<WordType, int> word = words.Select((item, index) => new KeyValuePair<WordType, int>(item, index)).Where(item => item.Key.IsKey).First();






Questa soluzione mi ha aiutato di più, da msdn microsoft :

var result =  query.AsEnumerable().Select((x, index) =>
              new { index,x.Id,x.FirstName});

la query è la tua query toList()




Related


Tags

c#   arrays   linq