Así que ¿por qué no devolver la primera aparición de "posponer"? Porque más adelante en la secuencia que ver la misma palabra "posponer" de nuevo. ¿Por qué volver a la primera aparición de "acceso"? Porque más adelante en la secuencia que usted no vea esta palabra más.
Así: el retorno de una palabra si el resto de la secuencia no tiene esta palabra.
Esto sería fácil en LINQ, con la recursividad, pero no es muy eficiente: por cada palabra que tendría que revisar el resto de la secuencia para ver si la palabra está en el resto.
Sería la manera más eficiente para recordar el más alto índice en el que se encuentra una palabra.
Como un método de extensión. Si usted no está familiarizado con los métodos de extensión, consulte métodos de extensión desmitificado.
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);
}
Así, por cada elemento de la secuencia de origen, debemos comprobar si está en el diccionario. Si no, se añade el elemento clave para el diccionario. El valor es el índice.
Si ya está en el diccionario, entonces el valor fue el más alto índice de donde hemos encontrado este artículo antes. Al parecer, el índice actual es mayor, por lo que vamos a reemplazar el valor en el diccionario.
Finalmente pedimos la clave de los pares de valores en el diccionario por orden ascendente de valor, y sólo devuelve las llaves.