2012-03-17 57 views
1

只是关于我在vb中遇到的问题的一个简短问题。在visual basic中创建阵列和人口问题

我需要创建一个数组,然后迭代通过一个字符串,只将字符串值添加到数组中,只是它不存在,以产生一个唯一值的数组。

我遇到的问题是与array.length操作 - 在没有数组的数组,我无法检索数组长度(0),因此我无法redimensional数组为数组长度(必须因为数组是从0开始索引的),这使我能够将新值添加到数组中,然后继续循环,直到检查了所有值以查看它们是否存在于数组中(使用contains)并且该值包含唯一的值..

咬了我的头几个小时:)

感谢 马丁

+1

这是真的VB.Net错标签作为VB6? VB6在数组上没有“length”属性,这不是VB6中的对象。 – Bob77 2012-03-17 02:14:23

+0

VB6也没有“包含”数组。必须是VB.net? – MarkJ 2012-03-17 07:23:34

回答

1

我必须假设你正在使用VB.Net,所以我会相应地回答。 你是从字面上寻找的答案是:

Public Function GetUniqueChars(text As String) As Char() 
     Dim uniqueChars() As Char 

     ReDim uniqueChars(0) 
     If String.IsNullOrEmpty(text) Then Return uniqueChars 

     uniqueChars(0) = text(0) 

     For Each c In text.Substring(1) 
      If Not uniqueChars.Contains(c) Then 
       ReDim Preserve uniqueChars(uniqueChars.Length) 
       uniqueChars(uniqueChars.Length - 1) = c 
      End If 
     Next 

     Return uniqueChars 

    End Function 

但是,从.NET 3.5,你可以使用LINQ此功能减少到一个行:

uniqueChars = text.Distinct().ToArray 
+0

辉煌,欢呼:) – marscom 2012-03-18 23:01:01

+0

很好的答案,谢谢Dabblernl! – Dayan 2012-07-30 22:45:23

0

从字面上看,,因为我上次在VB6中编程(一次是我最喜欢的语言)。话虽这么说,我记得使用UBound()就像找到一个数组的长度:

iLength = UBound(myArray) 

我还记得使用数重新声明我的数组中添加使用类似的另一个值(即动态数组):

ReDim Preserve myArray(iLength) 

也许这将激发您的循环解决方案。