तो तुम क्यों नहीं करना चाहिए वापसी की पहली घटना "स्थगित"? क्योंकि अनुक्रम में बाद में आप देखते हैं एक ही शब्द "स्थगित" फिर से. क्यों आप वापसी की पहली घटना "का उपयोग"? क्योंकि अनुक्रम में बाद में आप देख नहीं है इस शब्द अब और नहीं.
तो: वापसी, तो एक शब्द के बाकी अनुक्रम नहीं है, यह शब्द ।
यह आसान हो जाएगा में LINQ, प्रत्यावर्तन के साथ, लेकिन यह बहुत कुशल नहीं है: हर शब्द के लिए आप होगा की जाँच करने के लिए बाकी के अनुक्रम देखने के लिए अगर शब्द है में आराम करो.
यह होगा और अधिक कुशल तरीके से याद करने के लिए उच्चतम सूचकांक पर जो आप एक शब्द पाया.
के रूप में एक विस्तार विधि है । यदि आप परिचित नहीं हैं के साथ विस्तार तरीकों, देखते विस्तार तरीकों demystified.
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);
}
तो में हर आइटम के लिए स्रोत अनुक्रम के साथ, हम जाँच अगर यह शब्दकोश में है. यदि नहीं, तो हम आइटम जोड़ने के रूप में करने के लिए कुंजी शब्दकोश. मूल्य सूचकांक है ।
यदि यह पहले से ही है शब्दकोश में है, तो मूल्य सबसे अधिक था के सूचकांक जहां हमने पाया है इस मद से पहले. जाहिरा तौर पर वर्तमान सूचकांक में अधिक है, तो हम जगह में मूल्य शब्दकोश में है ।
अंत में, हम आदेश की कुंजी मूल्य जोड़े में शब्दकोश द्वारा आरोही मूल्य, और बदले केवल चाबियाँ.