counting duplicate values

N

NiQ

Hello every one,
this is about an array of string and may be have done several time
before but i need it and wasnt able to find it so here is the problem

i have an array of strings with contains words and i want a distinct
list of array with the count of each number repeat i.e how many time
it exist in the array and the final result should be sorted according
to the number of repeat from hight to low .
for example

thearray="32a,7s,5a,29s,20,29s,32a,8,5a,32a,32a,32a"

the result should be
32a
29s
5a
7s
20
8


i have this code which take out all the duplicate values and print the
distinct values

function RemCDups(byVal thearray)

Dim element,element2,k,i,j
dim newArray()
redim newArray(0)

for i = 0 to ubound(thearray)

element = thearray(i)
element2 = "false"

for j = i + 1 to Ubound(thearray)
if theArray(j) = element then
element2 = "true"
end if
next

if element2 = "false" then
redim preserve newArray(Ubound(newArray)+1)
newArray(k) = theArray(i)
k = k + 1
end if
next

RemCDups = newArray
end function

but i want to modify it to do the sort according to the count of each
element from high to low

thanks.

regards
NIQ
 
R

Roy Danon

So you have succeded finding the values and putting 'em into an array and
now you want to order the array?

for j = 1 to ubound(array)
for i = 0 to ubound(array)
if not i=ubound(array)
if array(i)<array(i+1) then
temp=array(i)
array(i)=array(i+1)
array(i+1)=temp
end if
end if
next
next

I hope i've written the algorithem currect... this is the simplest way to
order an array.
you can also use JS.


Roy.
 
R

Roland Hall

:
: i have an array of strings with contains words and i want a distinct
: list of array with the count of each number repeat i.e how many time
: it exist in the array and the final result should be sorted according
: to the number of repeat from hight to low .
: for example
:
: thearray="32a,7s,5a,29s,20,29s,32a,8,5a,32a,32a,32a"
: the result should be
: 32a
: 29s
: 5a
: 7s
: 20
: 8
: but i want to modify it to do the sort according to the count of each
: element from high to low

NiQ...

I took a different approach and chose to use a dictionary.

I took your string and split it to create an array of elements.

I took the elements of the array and created a dictionary but only to add
unique keys so the result was 6 keys. I then created another dictionary,
comparing with the first dictionary keys to find the duplicates and then
incremented the value of the items. After that I used a dictionary sort I
found at Microsoft and modified it so I could pass the order to return the
results.

This is my solution. There is a link on the page to view the source.

http://kiddanger.com/lab/array.asp

HTH...

--
Roland Hall
/* This information is distributed in the hope that it will be useful, but
without any warranty; without even the implied warranty of merchantability
or fitness for a particular purpose. */
Technet Script Center - http://www.microsoft.com/technet/scriptcenter/
WSH 5.6 Documentation - http://msdn.microsoft.com/downloads/list/webdev.asp
MSDN Library - http://msdn.microsoft.com/library/default.asp
 
N

NiQ

thanks a lot to both of you . i will try these codes and will post
incase of any furthur help . but i really appreciate this thanks a
lot.

regards
niq
 
N

NiQ

hi ronald
thanks again for your great help , i am just having a little problem
when i increase the number of one exisitence more than 10 then it
sorts it verz strangly i want to sort on the number of occourences
with the code u wrote can u try this array
thearray = "32a,7s,5a,29s,20,29s,32a,8,5a,32a,32a,32a,32a,32a,32a,32a,32a,32a,32a,32a"

the result will be something like this
2=29s
2=5a
13=32a
1=8
1=20
1=7s

when it should be
13=32a
2=29s
2=5a
1=8
1=20
1=7s

please let me know how i can fix it .

best regards
NIQ
 
B

Bob Barrows

NiQ said:
hi ronald
thanks again for your great help , i am just having a little problem
when i increase the number of one exisitence more than 10 then it
sorts it verz strangly i want to sort on the number of occourences
with the code u wrote can u try this array
thearray =
"32a,7s,5a,29s,20,29s,32a,8,5a,32a,32a,32a,32a,32a,32a,32a,32a,32a,32a,32a"

the result will be something like this
2=29s
2=5a
13=32a
1=8
1=20
1=7s

This is the correct alpha (string) sort order.
when it should be
13=32a
2=29s
2=5a
1=8
1=20
1=7s


You want a numeric sort order so you need to convert the strings to numbers
before doing the sort. This is the line that needs changing:

If StrComp(strDict(X,intSort),strDict(Y,intSort),vbTextCompare) > 0 Then

Change it to
If CInt(strDict(X,intSort)) > CInt(strDict(Y,intSort)) Then

HTH,
Bob Barrows
 
R

Roland Hall

:
: NiQ wrote:
: > hi ronald
: > thanks again for your great help , i am just having a little problem
: > when i increase the number of one exisitence more than 10 then it
: > sorts it verz strangly i want to sort on the number of occourences
: > with the code u wrote can u try this array
: > thearray =
: >
:
"32a,7s,5a,29s,20,29s,32a,8,5a,32a,32a,32a,32a,32a,32a,32a,32a,32a,32a,32a"
: >
: > the result will be something like this
: > 2=29s
: > 2=5a
: > 13=32a
: > 1=8
: > 1=20
: > 1=7s
:
: This is the correct alpha (string) sort order.
: >
: > when it should be
: > 13=32a
: > 2=29s
: > 2=5a
: > 1=8
: > 1=20
: > 1=7s
: >
:
:
: You want a numeric sort order so you need to convert the strings to
numbers
: before doing the sort. This is the line that needs changing:
:
: If StrComp(strDict(X,intSort),strDict(Y,intSort),vbTextCompare) > 0 Then
:
: Change it to
: If CInt(strDict(X,intSort)) > CInt(strDict(Y,intSort)) Then

I changed the whole function so you can pass text or numeric so the sort
routine could be reusable in the future.
http://kiddanger.com/lab/array.asp

Thanks for your help Bob. (O:=

--
Roland Hall
/* This information is distributed in the hope that it will be useful, but
without any warranty; without even the implied warranty of merchantability
or fitness for a particular purpose. */
Technet Script Center - http://www.microsoft.com/technet/scriptcenter/
WSH 5.6 Documentation - http://msdn.microsoft.com/downloads/list/webdev.asp
MSDN Library - http://msdn.microsoft.com/library/default.asp
 
N

NiQ

hi Roland,
there is something wrong . it take the count sort as character i.e if
the

occourance is 102 then it will come with all 1's then all 2's

thearray="32a,7s,5a,29s,20,29s,32a,8,5a,32a,32a,32a,32a,32a,32a,32a,32a,32a,32a,32a,32a"

try with this and you will see what i mean .

i tried a little but can get it work . may be you can help

thanks a lot

regards
niq
 
R

Roland Hall

:
: hi Roland,
: there is something wrong . it take the count sort as character i.e if
: the
:
: occourance is 102 then it will come with all 1's then all 2's
:
:
thearray="32a,7s,5a,29s,20,29s,32a,8,5a,32a,32a,32a,32a,32a,32a,32a,32a,32a,
32a,32a,32a"
:
: try with this and you will see what i mean .
:
: i tried a little but can get it work . may be you can help

I did and it works fine. Perhaps you missed my other post following Bob's
first post on this thread. The example is running with the above value.

--
Roland Hall
/* This information is distributed in the hope that it will be useful, but
without any warranty; without even the implied warranty of merchantability
or fitness for a particular purpose. */
Technet Script Center - http://www.microsoft.com/technet/scriptcenter/
WSH 5.6 Documentation - http://msdn.microsoft.com/downloads/list/webdev.asp
MSDN Library - http://msdn.microsoft.com/library/default.asp
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,755
Messages
2,569,534
Members
45,007
Latest member
obedient dusk

Latest Threads

Top