Perché non si dovrebbe tornare il prima occorrenza di "rimandare"? Perché poi nella sequenza si vede la stessa parola "rimandare" di nuovo. Perché vuoi tornare prima occorrenza di "accesso"? Perché poi in sequenza non vedi questa parola in più.
Quindi: il ritorno di una parola, se il resto della sequenza non ha questa parola.
Questo sarebbe stato facile in LINQ, con la ricorsione, ma non è molto efficiente: per ogni parola è necessario controllare il resto della sequenza per vedere se la parola è in tutto il resto.
Sarebbe il modo più efficiente per ricordare il più alto indice su cui si trova una parola.
Come un metodo di estensione. Se non si ha familiarità con i metodi di estensione, vedere metodi di estensione demistificata.
private static IEnumerable<T> FindLastOccurences<T>(this IEnumerable<T> source)
{
return FindLastOccurrences<T>(source, null);
}
private static IEnumerable<T> FindLastOccurences<T>(this IEnumerable<T> source,
IEqualityComparer<T> comparer)
{
// TODO: check source not null
if (comparer == null) comparer = EqualityComparer<T>.Default;
Dictionary<T, int> dictionary = new Dictionary<T, int>(comparer);
int index = 0;
foreach (T item in source)
{
// did we already see this T? = is this in the dictionary
if (dictionary.TryGetValue(item, out int highestIndex))
{
// we already saw it at index highestIndex.
dictionary[item] = index;
}
else
{
// it is not in the dictionary, we never saw this item.
dictionary.Add(item, index);
}
++index;
}
// return the keys after sorting by value (which contains the highest index)
return dictionay.OrderBy(keyValuePair => keyValuePair.Value)
.Select(keyValuePair => keyValuePair.Key);
}
Quindi per ogni elemento della sequenza di origine, controlliamo se è nel dizionario. Se non, si aggiunge l'elemento chiave del dizionario. Il valore è l'indice.
Se è già presente nel dizionario, quindi il valore è il più alto indice di dove abbiamo trovato questo articolo prima. A quanto pare l'attuale indice è superiore, quindi sostituiamo il valore nel dizionario.
Infine abbiamo ordine di coppie chiave-valore in il dizionario in ordine crescente di valore, e di restituire solo i tasti.