这是个很老很无趣的话题,常见于C语言的作业题。其实严格意义上来说,用List泛型属于作弊了~,但过程非常简单,没有技术含量,主要是让大家看看C#的优雅。

我们知道,以前在C语言中要删除数组里的重复元素非常麻烦,要有两个游标(这意味着至少2层for嵌套),还要关心元素移位的问题。现在,如果把数组这样可以看作集合的东西放到集合类型里,比如List泛型,事情就会容易的多:

static void Main(string[] args)
{
    List strs = new List() { "a", "b", "c", "c", "d", "c", "a", "e", "f", "b", "g", "h" };

    // 不能用foreach,因为迭代器是只读的
    for (int i = 0; i < strs.Count; i++)
    {
        // 如果第一次出现的位置不等于最后一次出现的位置,则说明该元素不止出现一次
        if (strs.IndexOf(strs[i]) != strs.LastIndexOf(strs[i]))
        {
            strs.RemoveAt(strs.LastIndexOf(strs[i]));
        }
    }

    foreach (var item in strs)
    {
        Console.Write(item + " ");
    }
}

有图有真相: