472,371 Members | 1,512 Online
Bytes | Software Development & Data Engineering Community
Post Job

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 472,371 software developers and data experts.

Unique an array of strings

I'm looking for a simple way to unique an array of strings. I came up
with this. Does it make sense? Am i missing anything? (Testing seems to
show it to work.)

Public Function Unique(ByVal List() As String) As String()

' Returns the unique values of in array, in an array.

Dim Temp As New
System.Collections.Specialized.StringCollection()

For Each Current_String As String In List
If Not Temp.Contains(Current_String) Then
Temp.Add(Current_String)
Next

ReDim Unique(Temp.Count - 1)

Temp.CopyTo(Unique, 0)

End Function

B.

Aug 2 '06 #1
9 5535

"Brian Tkatch" <Ma***********@ThePentagon.comwrote in message
news:11**********************@h48g2000cwc.googlegr oups.com...
I'm looking for a simple way to unique an array of strings. I came up
with this. Does it make sense? Am i missing anything? (Testing seems to
show it to work.)

Public Function Unique(ByVal List() As String) As String()

' Returns the unique values of in array, in an array.

Dim Temp As New
System.Collections.Specialized.StringCollection()

For Each Current_String As String In List
If Not Temp.Contains(Current_String) Then
Temp.Add(Current_String)
Next

ReDim Unique(Temp.Count - 1)

Temp.CopyTo(Unique, 0)

End Function

B.
Public Function Unique(ByVal List As String()) As String()
Dim temp As StringCollection = New StringCollection()

For Each current As String in List
If Not temp.Contains(current)
temp.Add(current)
End If
Next

Return temp
End Function

You don't need to ReDim Unique ... you could just use the "Return" statement
to return the array.
Shortened it up a wittle...and afaik, this would be how you remove duplicate
array entries...

HTH,
Mythran
Aug 2 '06 #2
Mythran wrote:
"Brian Tkatch" <Ma***********@ThePentagon.comwrote in message
news:11**********************@h48g2000cwc.googlegr oups.com...
I'm looking for a simple way to unique an array of strings. I came up
with this. Does it make sense? Am i missing anything? (Testing seems to
show it to work.)

Public Function Unique(ByVal List() As String) As String()

' Returns the unique values of in array, in an array.

Dim Temp As New
System.Collections.Specialized.StringCollection()

For Each Current_String As String In List
If Not Temp.Contains(Current_String) Then
Temp.Add(Current_String)
Next

ReDim Unique(Temp.Count - 1)

Temp.CopyTo(Unique, 0)

End Function

B.

Public Function Unique(ByVal List As String()) As String()
Dim temp As StringCollection = New StringCollection()

For Each current As String in List
If Not temp.Contains(current)
temp.Add(current)
End If
Next

Return temp
End Function

You don't need to ReDim Unique ... you could just use the "Return" statement
to return the array.
Shortened it up a wittle...and afaik, this would be how you remove duplicate
array entries...

HTH,
Mythran
Thanx for the feedback.

Hmm.. aren't you returning a StringCollection, when the Function
declared an array of String? Is there a way to do that? I put it back
into an array to return the same type.

As for the Redim, i thought it would be nicer to explicitly set the
size. But mostly, VB didn't like me using the function name without
doing something with it first (the green line, and at run time i got an
error about not instantiating it yet.)

B.

Aug 2 '06 #3

"Brian Tkatch" <Ma***********@ThePentagon.comwrote in message
news:11*********************@h48g2000cwc.googlegro ups.com...
Mythran wrote:
>"Brian Tkatch" <Ma***********@ThePentagon.comwrote in message
news:11**********************@h48g2000cwc.googleg roups.com...
I'm looking for a simple way to unique an array of strings. I came up
with this. Does it make sense? Am i missing anything? (Testing seems to
show it to work.)

Public Function Unique(ByVal List() As String) As String()

' Returns the unique values of in array, in an array.

Dim Temp As New
System.Collections.Specialized.StringCollection()

For Each Current_String As String In List
If Not Temp.Contains(Current_String) Then
Temp.Add(Current_String)
Next

ReDim Unique(Temp.Count - 1)

Temp.CopyTo(Unique, 0)

End Function

B.

Public Function Unique(ByVal List As String()) As String()
Dim temp As StringCollection = New StringCollection()

For Each current As String in List
If Not temp.Contains(current)
temp.Add(current)
End If
Next

Return temp
End Function

You don't need to ReDim Unique ... you could just use the "Return"
statement
to return the array.
Shortened it up a wittle...and afaik, this would be how you remove
duplicate
array entries...

HTH,
Mythran

Thanx for the feedback.

Hmm.. aren't you returning a StringCollection, when the Function
declared an array of String? Is there a way to do that? I put it back
into an array to return the same type.

As for the Redim, i thought it would be nicer to explicitly set the
size. But mostly, VB didn't like me using the function name without
doing something with it first (the green line, and at run time i got an
error about not instantiating it yet.)

B.
woops, in this case I would do the following :D

Public Function Unique(ByVal List As String()) As String()
Dim temp As ArrayList = New ArrayList()

For Each current As String in List
If Not temp.Contains(current)
temp.Add(current)
End If
Next

Return DirectCast(temp.ToArray(GetType(String)), String())
End Function
:D That's what I get for not testing it heh..

HTH,
Mythran

Aug 2 '06 #4
Mythran wrote:
"Brian Tkatch" <Ma***********@ThePentagon.comwrote in message
news:11*********************@h48g2000cwc.googlegro ups.com...
Mythran wrote:
"Brian Tkatch" <Ma***********@ThePentagon.comwrote in message
news:11**********************@h48g2000cwc.googlegr oups.com...
I'm looking for a simple way to unique an array of strings. I came up
with this. Does it make sense? Am i missing anything? (Testing seems to
show it to work.)

Public Function Unique(ByVal List() As String) As String()

' Returns the unique values of in array, in an array.

Dim Temp As New
System.Collections.Specialized.StringCollection()

For Each Current_String As String In List
If Not Temp.Contains(Current_String) Then
Temp.Add(Current_String)
Next

ReDim Unique(Temp.Count - 1)

Temp.CopyTo(Unique, 0)

End Function

B.


Public Function Unique(ByVal List As String()) As String()
Dim temp As StringCollection = New StringCollection()

For Each current As String in List
If Not temp.Contains(current)
temp.Add(current)
End If
Next

Return temp
End Function

You don't need to ReDim Unique ... you could just use the "Return"
statement
to return the array.
Shortened it up a wittle...and afaik, this would be how you remove
duplicate
array entries...

HTH,
Mythran
Thanx for the feedback.

Hmm.. aren't you returning a StringCollection, when the Function
declared an array of String? Is there a way to do that? I put it back
into an array to return the same type.

As for the Redim, i thought it would be nicer to explicitly set the
size. But mostly, VB didn't like me using the function name without
doing something with it first (the green line, and at run time i got an
error about not instantiating it yet.)

B.

woops, in this case I would do the following :D

Public Function Unique(ByVal List As String()) As String()
Dim temp As ArrayList = New ArrayList()

For Each current As String in List
If Not temp.Contains(current)
temp.Add(current)
End If
Next

Return DirectCast(temp.ToArray(GetType(String)), String())
End Function
:D That's what I get for not testing it heh..

HTH,
Mythran
Kewl. I didn't realize i could use an ArrayList here. A bit nicer.

With about an array(1000000) with about 400,000 entries (just my quikie
test) ArrayList was about 1/100 of a second faster. (Tested without
DirectCast.)

What's the DirectCast for? The help also does it (well, it uses
CType()) but ToArray() itself is casting it. Why cast it again?

B.

Aug 2 '06 #5
>woops, in this case I would do the following :D
>>
Public Function Unique(ByVal List As String()) As String()
Dim temp As ArrayList = New ArrayList()

For Each current As String in List
If Not temp.Contains(current)
temp.Add(current)
End If
Next

Return DirectCast(temp.ToArray(GetType(String)), String())
End Function
:D That's what I get for not testing it heh..

HTH,
Mythran

Kewl. I didn't realize i could use an ArrayList here. A bit nicer.

With about an array(1000000) with about 400,000 entries (just my quikie
test) ArrayList was about 1/100 of a second faster. (Tested without
DirectCast.)

What's the DirectCast for? The help also does it (well, it uses
CType()) but ToArray() itself is casting it. Why cast it again?

B.
ToArray places all items in the ArrayList into an array and returns the
array as an object array. I am using DirectCast to cast from an object
array to a string array :) Sure, if you don't have Option Strict turned on,
it would perform the casting automatically, but I have a habit of turning on
Option Strict for my projects :)

HTH,
Mythran
Aug 2 '06 #6

Mythran wrote:
woops, in this case I would do the following :D

Public Function Unique(ByVal List As String()) As String()
Dim temp As ArrayList = New ArrayList()

For Each current As String in List
If Not temp.Contains(current)
temp.Add(current)
End If
Next

Return DirectCast(temp.ToArray(GetType(String)), String())
End Function
:D That's what I get for not testing it heh..

HTH,
Mythran
Kewl. I didn't realize i could use an ArrayList here. A bit nicer.

With about an array(1000000) with about 400,000 entries (just my quikie
test) ArrayList was about 1/100 of a second faster. (Tested without
DirectCast.)

What's the DirectCast for? The help also does it (well, it uses
CType()) but ToArray() itself is casting it. Why cast it again?

B.

ToArray places all items in the ArrayList into an array and returns the
array as an object array. I am using DirectCast to cast from an object
array to a string array :) Sure, if you don't have Option Strict turned on,
it would perform the casting automatically, but I have a habit of turning on
Option Strict for my projects :)

HTH,
Mythran
But isn't that only if you do not specify the Tyope in ToArray()?

According to the help: <URL:
ms-help://MS.MSDNQTR.v80.en/MS.MSDN.v80/MS.NETDEVFX.v20.en/cpref2/html/M_System_Collections_ArrayList_ToArray_1_a6998a77. htm>

ArrayList.ToArray Method (Type)
....
Copies the elements of the ArrayList to a new array of the specified
element type.
....
Parameters
type
The element Type of the destination array to create and copy elements
to

Return Value
An array of the specified element type containing copies of the
elements of the ArrayList.

What am i missing?

B.

Aug 4 '06 #7

"Brian Tkatch" <Ma***********@ThePentagon.comwrote in message
news:11**********************@m79g2000cwm.googlegr oups.com...
>
Mythran wrote:
>woops, in this case I would do the following :D

Public Function Unique(ByVal List As String()) As String()
Dim temp As ArrayList = New ArrayList()

For Each current As String in List
If Not temp.Contains(current)
temp.Add(current)
End If
Next

Return DirectCast(temp.ToArray(GetType(String)), String())
End Function
:D That's what I get for not testing it heh..

HTH,
Mythran

Kewl. I didn't realize i could use an ArrayList here. A bit nicer.

With about an array(1000000) with about 400,000 entries (just my quikie
test) ArrayList was about 1/100 of a second faster. (Tested without
DirectCast.)

What's the DirectCast for? The help also does it (well, it uses
CType()) but ToArray() itself is casting it. Why cast it again?

B.

ToArray places all items in the ArrayList into an array and returns the
array as an object array. I am using DirectCast to cast from an object
array to a string array :) Sure, if you don't have Option Strict turned
on,
it would perform the casting automatically, but I have a habit of turning
on
Option Strict for my projects :)

HTH,
Mythran

But isn't that only if you do not specify the Tyope in ToArray()?

According to the help: <URL:
ms-help://MS.MSDNQTR.v80.en/MS.MSDN.v80/MS.NETDEVFX.v20.en/cpref2/html/M_System_Collections_ArrayList_ToArray_1_a6998a77. htm>

ArrayList.ToArray Method (Type)
...
Copies the elements of the ArrayList to a new array of the specified
element type.
...
Parameters
type
The element Type of the destination array to create and copy elements
to

Return Value
An array of the specified element type containing copies of the
elements of the ArrayList.

What am i missing?

B.
The ToArray method does not return an object() as I originally mentioned.
The type returned is System.Array. When you have Option Strict turned on,
you can not set a string-array to <instance of ArrayList>.ToArray( ... ) .
The compiler will give you errors (I did, in fact, test this part out).

Otherwise, yes you are correct that it does create a string array (or array
of the specified type passed into ToArray).

Dim array As Array = list.ToArray(GetType(String))
Console.WriteLine(array) ' Returns String[]

Mythran
Aug 4 '06 #8

Mythran wrote:
"Brian Tkatch" <Ma***********@ThePentagon.comwrote in message
news:11**********************@m79g2000cwm.googlegr oups.com...

Mythran wrote:
woops, in this case I would do the following :D

Public Function Unique(ByVal List As String()) As String()
Dim temp As ArrayList = New ArrayList()

For Each current As String in List
If Not temp.Contains(current)
temp.Add(current)
End If
Next

Return DirectCast(temp.ToArray(GetType(String)), String())
End Function
:D That's what I get for not testing it heh..

HTH,
Mythran

Kewl. I didn't realize i could use an ArrayList here. A bit nicer.

With about an array(1000000) with about 400,000 entries (just my quikie
test) ArrayList was about 1/100 of a second faster. (Tested without
DirectCast.)

What's the DirectCast for? The help also does it (well, it uses
CType()) but ToArray() itself is casting it. Why cast it again?

B.


ToArray places all items in the ArrayList into an array and returns the
array as an object array. I am using DirectCast to cast from an object
array to a string array :) Sure, if you don't have Option Strict turned
on,
it would perform the casting automatically, but I have a habit of turning
on
Option Strict for my projects :)

HTH,
Mythran
But isn't that only if you do not specify the Tyope in ToArray()?

According to the help: <URL:
ms-help://MS.MSDNQTR.v80.en/MS.MSDN.v80/MS.NETDEVFX.v20.en/cpref2/html/M_System_Collections_ArrayList_ToArray_1_a6998a77. htm>

ArrayList.ToArray Method (Type)
...
Copies the elements of the ArrayList to a new array of the specified
element type.
...
Parameters
type
The element Type of the destination array to create and copy elements
to

Return Value
An array of the specified element type containing copies of the
elements of the ArrayList.

What am i missing?

B.

The ToArray method does not return an object() as I originally mentioned.
The type returned is System.Array. When you have Option Strict turned on,
you can not set a string-array to <instance of ArrayList>.ToArray( ... ) .
The compiler will give you errors (I did, in fact, test this part out).

Otherwise, yes you are correct that it does create a string array (or array
of the specified type passed into ToArray).

Dim array As Array = list.ToArray(GetType(String))
Console.WriteLine(array) ' Returns String[]

Mythran
So, then, to be clear, in the example you provided:

Return DirectCast(temp.ToArray(GetType(String)), String())

is the DirectCast extra or not?

BTW, thanx for all the detailed responses.

B.

Aug 4 '06 #9

"Brian Tkatch" <Ma***********@ThePentagon.comwrote in message
news:11*********************@p79g2000cwp.googlegro ups.com...
>
Mythran wrote:
>"Brian Tkatch" <Ma***********@ThePentagon.comwrote in message
news:11**********************@m79g2000cwm.googleg roups.com...
>
Mythran wrote:
woops, in this case I would do the following :D

Public Function Unique(ByVal List As String()) As String()
Dim temp As ArrayList = New ArrayList()

For Each current As String in List
If Not temp.Contains(current)
temp.Add(current)
End If
Next

Return DirectCast(temp.ToArray(GetType(String)), String())
End Function
:D That's what I get for not testing it heh..

HTH,
Mythran

Kewl. I didn't realize i could use an ArrayList here. A bit nicer.

With about an array(1000000) with about 400,000 entries (just my
quikie
test) ArrayList was about 1/100 of a second faster. (Tested without
DirectCast.)

What's the DirectCast for? The help also does it (well, it uses
CType()) but ToArray() itself is casting it. Why cast it again?

B.
ToArray places all items in the ArrayList into an array and returns
the
array as an object array. I am using DirectCast to cast from an
object
array to a string array :) Sure, if you don't have Option Strict
turned
on,
it would perform the casting automatically, but I have a habit of
turning
on
Option Strict for my projects :)

HTH,
Mythran

But isn't that only if you do not specify the Tyope in ToArray()?

According to the help: <URL:
ms-help://MS.MSDNQTR.v80.en/MS.MSDN.v80/MS.NETDEVFX.v20.en/cpref2/html/M_System_Collections_ArrayList_ToArray_1_a6998a77. htm>

ArrayList.ToArray Method (Type)
...
Copies the elements of the ArrayList to a new array of the specified
element type.
...
Parameters
type
The element Type of the destination array to create and copy elements
to

Return Value
An array of the specified element type containing copies of the
elements of the ArrayList.

What am i missing?

B.

The ToArray method does not return an object() as I originally mentioned.
The type returned is System.Array. When you have Option Strict turned
on,
you can not set a string-array to <instance of ArrayList>.ToArray( ... )
.
The compiler will give you errors (I did, in fact, test this part out).

Otherwise, yes you are correct that it does create a string array (or
array
of the specified type passed into ToArray).

Dim array As Array = list.ToArray(GetType(String))
Console.WriteLine(array) ' Returns String[]

Mythran

So, then, to be clear, in the example you provided:

Return DirectCast(temp.ToArray(GetType(String)), String())

is the DirectCast extra or not?

BTW, thanx for all the detailed responses.

B.
It depends on whether or not Option Strict is turned on. If it's turned on,
then it is requird (either DirectCast or CType). If it's not turned on,
then it is not required.

HTH,
Mythran
Aug 4 '06 #10

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

1
by: Brian | last post by:
I have an array like this: $events = array( array( '2003-07-01', 'Event Title 1', '1' //ID Number (not unique) ), array( '2003-07-02',
6
by: Sims | last post by:
Hi, Given a string $txt and an array of strings $txt_array what would be the best/fastest way to search in _insensitive_ case if $txt is in $text_array and, if it is, where is it? Because I...
2
by: m|sf|t | last post by:
All, I have a snippet of code below. In my foreach, I would like to process only 1 item per hdd value, in the case below, the echo $tib . "\n"; would only display 1 and 2, not 1,1,1,1,2,2,2,2. It...
2
by: Raterus | last post by:
Hi, I'm looking for ideas for the most efficient way to accomplish this. I have a string representing names a person goes by. "John Myers Joe John Myers" And I need to parse it in such a...
4
Ispep
by: Ispep | last post by:
Hi, unfortunately having a bit of difficulty with a question from an Open University course I'm currently doing. If you could help me out in any way I'd be grafeul (though obviously it goes without...
10
by: Krustov | last post by:
$rambo="daffy duck"; $rambo="mad max"; $rambo="daffy duck"; $rambo="superman"; etc etc How do i remove duplicate strings from a array ? . ('daffy duck' could appear more than twice in the...
35
by: RobG | last post by:
Seems developers of mobile applications are pretty much devoted to UA sniffing: <URL: http://wurfl.sourceforge.net/vodafonerant/index.htm > -- Rob
2
by: dniom | last post by:
Hi. Can you help me please? Is there any way to show a unique random item from an array, every time you refresh the page? In other words how do I show the items from an array in random order, one by...
1
by: charindal | last post by:
i would like some help on how to retrieve array indexes. i have the following scenario: List <string> alphabet = new ....; alphabet.add("a"); alphabet.add("b"); alphabet.add("a");...
2
by: Kemmylinns12 | last post by:
Blockchain technology has emerged as a transformative force in the business world, offering unprecedented opportunities for innovation and efficiency. While initially associated with cryptocurrencies...
0
by: Naresh1 | last post by:
What is WebLogic Admin Training? WebLogic Admin Training is a specialized program designed to equip individuals with the skills and knowledge required to effectively administer and manage Oracle...
0
by: antdb | last post by:
Ⅰ. Advantage of AntDB: hyper-convergence + streaming processing engine In the overall architecture, a new "hyper-convergence" concept was proposed, which integrated multiple engines and...
0
hi
by: WisdomUfot | last post by:
It's an interesting question you've got about how Gmail hides the HTTP referrer when a link in an email is clicked. While I don't have the specific technical details, Gmail likely implements measures...
1
by: Matthew3360 | last post by:
Hi, I have been trying to connect to a local host using php curl. But I am finding it hard to do this. I am doing the curl get request from my web server and have made sure to enable curl. I get a...
0
Oralloy
by: Oralloy | last post by:
Hello Folks, I am trying to hook up a CPU which I designed using SystemC to I/O pins on an FPGA. My problem (spelled failure) is with the synthesis of my design into a bitstream, not the C++...
0
by: Carina712 | last post by:
Setting background colors for Excel documents can help to improve the visual appeal of the document and make it easier to read and understand. Background colors can be used to highlight important...
2
by: Ricardo de Mila | last post by:
Dear people, good afternoon... I have a form in msAccess with lots of controls and a specific routine must be triggered if the mouse_down event happens in any control. Than I need to discover what...
1
by: Johno34 | last post by:
I have this click event on my form. It speaks to a Datasheet Subform Private Sub Command260_Click() Dim r As DAO.Recordset Set r = Form_frmABCD.Form.RecordsetClone r.MoveFirst Do If...

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.