Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Vb.Net中,如何删除重复项,但在列表中至少保留一个重复项?_.net_Vb.net_Arrays_List_Items - Fatal编程技术网

在Vb.Net中,如何删除重复项,但在列表中至少保留一个重复项?

在Vb.Net中,如何删除重复项,但在列表中至少保留一个重复项?,.net,vb.net,arrays,list,items,.net,Vb.net,Arrays,List,Items,我有一个列表对象,我想删除重复项,但在列表中至少保留一个重复项 我写了类似的东西,但是我会优化代码以获得更好的性能,有更快的吗 Const chars As String = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" Dim rnd As New Random() Dim mylist As List(Of String) = Enumerable.Range(1, 100).Select(Function(i) chars(r

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

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

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
Const chars As String=“abcdefghijklmnopqrstuvxyzabcdefghijklmnopqrstuvxyz”
Dim rnd作为新的随机变量()
Dim mylist As List(字符串的数量)=可枚举的范围(1100)。选择(函数(i)字符(rnd.Next(0,字符长度)).ToString.ToList
对于n作为整数=mylist.Count-1到n=0步骤-1
'删除重复的项目
'但在列表中至少保留一个重复项
如果mylist.IndexOf(mylist.Item(n),0)
您是否尝试过
.Distinct()


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

你试过
.Distinct()


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

你可以用a代替列表吗?

你可以用a代替列表吗?

我不确定
Distinct
是否能像Alex建议的那样对字符串起作用,但另一种解决方案是在调用
Distinct
之前将字符串转换为字符数组。下面是一个例子:

var test = "abcdefggabc";

test = new string(test.ToCharArray().Distinct().ToArray());
编辑:Alex在一个字符串上测试了这一点,它可以正常工作,因此任何一种解决方案都可以正常工作

如果您正在寻找LINQ的替代方案,那么您也应该能够通过正则表达式实现这一点。类似的方法可能会奏效:

var test = Regex.Replace("JJJJJ DDDD KK  YYYYY", @"(.)(\1)+", "$1");

我不确定
Distinct
是否能像Alex建议的那样在字符串上工作,但另一种解决方案是在调用
Distinct
之前将字符串转换为字符数组。下面是一个例子:

var test = "abcdefggabc";

test = new string(test.ToCharArray().Distinct().ToArray());
编辑:Alex在一个字符串上测试了这一点,它可以正常工作,因此任何一种解决方案都可以正常工作

如果您正在寻找LINQ的替代方案,那么您也应该能够通过正则表达式实现这一点。类似的方法可能会奏效:

var test = Regex.Replace("JJJJJ DDDD KK  YYYYY", @"(.)(\1)+", "$1");

你能使用LINQ的
.Distinct()
吗?你能使用LINQ的
.Distinct()
吗?我在一个字符串上测试了它;)-不要让“chars”变量在我的代码片段中愚弄你。为清晰起见进行了编辑。@Alex:很高兴知道:)谢谢!Alex的答案有效,因为字符串实现了
IEnumerable(字符的)
。值得了解的是,人们需要编写自己的自定义迭代器来遍历字符串中的字符!不过我在一根绳子上测试过;)-不要让“chars”变量在我的代码片段中愚弄你。为清晰起见进行了编辑。@Alex:很高兴知道:)谢谢!Alex的答案有效,因为字符串实现了
IEnumerable(字符的)
。值得了解的是,人们需要编写自己的自定义迭代器来遍历字符串中的字符!谢谢,我可以使用Distinct()列出对象,但我必须在调用Distinct()之前对列表进行排序吗?谢谢,我可以使用Distinct()列出对象,但我必须在调用Distinct()之前对列表进行排序吗?