1

我有一个 List 对象,我想删除重复的项目,但在列表中至少保留一个重复的项目;

我写了这样的东西但是我会优化这个代码以获得更好的性能,有更快的东西吗?

Const chars As String = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
Dim rnd As New Random()
Dim mylist As List(Of String) = Enumerable.Range(1, 100).Select(Function(i) chars(rnd.Next(0, chars.Length)).ToString).ToList

For n As Integer = mylist.Count - 1 To n = 0 Step -1

    'remove the item if it's duplicated
    'but leave at least one of the duplicated items in the list
    If mylist.IndexOf(mylist.Item(n), 0) < n Then
        mylist.RemoveAt(n)
    End If

Next
4

3 回答 3

6

你有没有尝试过 .Distinct()

Dim stringWithChars As String = "AABBCCDDEEFFaabbccddeeff"
Dim res = stringWithChars.Distinct() // ABCDEFabcdef

编辑:因为你没有说你使用哪个框架,我想你可以使用 Linq ( .NET 3.5 +)

于 2012-03-27T14:56:29.320 回答
2

我不确定是否Distinct像 Alex 建议的那样在字符串上工作,但另一种解决方案是在调用Distinct. 这是一个例子:

var test = "abcdefggabc";

test = new string(test.ToCharArray().Distinct().ToArray());

编辑:亚历克斯在一个字符串上测试了它并且它有效,所以任何一种解决方案都可以工作。

如果您正在寻找 LINQ 的替代方案,您也应该能够使用正则表达式来实现这一目标。像这样的东西可能会起作用:

var test = Regex.Replace("JJJJJ DDDD KK  YYYYY", @"(.)(\1)+", "$1");
于 2012-03-27T15:02:53.310 回答
1

你能用HashSet代替 List 吗?

于 2012-03-27T15:00:46.500 回答