2
序列中假設我們有對象刪除重複的連續對象
List<int> list = new List<int>() { 1,1,1,2,3,3,3,2,2,2,1,1 };
什麼是最優雅的方式來得到以下結果列表清單?
{1,2,3,2,1}
序列中假設我們有對象刪除重複的連續對象
List<int> list = new List<int>() { 1,1,1,2,3,3,3,2,2,2,1,1 };
什麼是最優雅的方式來得到以下結果列表清單?
{1,2,3,2,1}
試試這個:
List<int> newList = new List<int>();
foreach (var item in list.Where(c => newList.Count == 0 || newList.Last() != c))
{
newList.Add(item); // 1,2,3,2,1 will add to newList
}
我喜歡的擴展方法的想法:
public static IEnumerable<T> RemoveContiguousDuplicates<T>(this IEnumerable<T> items) where T: IEquatable<T>
{
bool init = false;
T prev = default(T);
foreach (T item in items)
{
if (!init)
init = true;
else if (prev.Equals(item))
continue;
prev = item;
yield return item;
}
}
然後,當然,要使用它:
var singles = list.RemoveContiguousDuplicates().ToList();
假設您的列表包含您可以使用的基本類型[Distinct()](https://msdn.microsof t.com/en-us/library/vstudio/bb348436(v=vs.100).aspx)。例如:'list.Distinct()。ToList();'。如果您的列表中包含複雜類型,則需要將其傳遞給您的類型實現的「IEqualityComparer」 – DGibbs
@sstan請閱讀我的問題bettera並刪除「標記爲重複」或提供有效答案 – Alex
您期望的結果{1,2 ,3,2,1}'不符合你的要求'刪除對象序列中的重複項,這會根據你的數據集給出'1,2,3'的結果。 – DGibbs