[Webinar] Streamline your web hosting managementRegister Today

x
?
Solved

finding duplicates in arraylist

Posted on 2007-12-01
4
Medium Priority
?
2,653 Views
Last Modified: 2011-10-03
I am using the method below to find the duplicates in an array list and remove them.  It works, but only finds the first duplicate.  So for instance if the list is "1", "1","1","2","2","3", the unique list is 1, 1, 2, 3.  Anyone know why that is?
   public void topTalkers()
        {

            int i, j, k;

            ArrayList arr = new ArrayList();
            string[] unTemp = new string[recordNum];
           
            for (int x = 0; x < recordNum - 1; x++)
            {
                unTemp[x]= srcIP[x];
            }
            for (k = 0; k < unTemp.Length-1; k++)
            {
                arr.Add(unTemp[k].ToString());
            }
            arr.Sort();
 

            for (i = 0; i < arr.Count - 1; i++)
            {
                for (j = i + 1; j < arr.Count; j++)
                {
                    if (arr[i].Equals(arr[j]))
                    {
                        MessageBox.Show("duplicate removed: " + arr[j]);
                        arr.RemoveAt(j);
                    }
                }
            }

            for (k = 0; k < arr.Count; k++)
            {
                MessageBox.Show(arr[k].ToString());

            }
        }

0
Comment
Question by:aareedy
4 Comments
 
LVL 55

Accepted Solution

by:
Jaime Olivares earned 500 total points
ID: 20389304
try with:
for (i = 0; i < arr.Count - 1; i++)
            {
                for (j = i + 1; j < arr.Count;)
                {
                    if (arr[i].Equals(arr[j]))
                    {
                        MessageBox.Show("duplicate removed: " + arr[j]);
                        arr.RemoveAt(j);
                    }
                    else
                        j+;
                }
            }

0
 
LVL 29

Expert Comment

by:Göran Andersson
ID: 20389399
As the list is sorted, you can reduce the comparisons you do drastically. You don't have to compare every item to all the other items, you only have to compare the items that are next to each other:
for (int i = 1; i < arr.Count;) {
   if (arr[i-1].Equals(arr[i]) {
      MessageBox.Show("Duplicate removed: " + arr[i].ToString());
      arr.RemoveAt(i);
   } else {
      i++;
   }
}

Open in new window

0
 
LVL 40

Expert Comment

by:evilrix
ID: 20389407
>> Anyone know why that is?
The problem is being caused by you removing the dup, which shuffles everything after it down one but then you increment j so you are missing the next one.

jaime_olivares suggested fix should over-come this.

Example: -

 0   1   2   3   4   5
"1","1","1","2","2","3", 
i=0, j=1 
arr[i] = 1
arr[j] = 1
dup found and removed
j++
 
 0   1   2   3   4   5
"1","1","2","2","3", 
i=0, j=2
arr[i] = 1
arr[j] = 2
 
dup missed

Open in new window

0
 

Author Closing Comment

by:aareedy
ID: 31412134
Thanks! Great help!
0

Featured Post

Upgrade your Question Security!

Your question, your audience. Choose who sees your identity—and your question—with question security.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

In real business world data are crucial and sometimes data are shared among different information systems. Hence, an agreeable file transfer protocol need to be established.
We live in a world of interfaces like the one in the title picture. VBA also allows to use interfaces which offers a lot of possibilities. This article describes how to use interfaces in VBA and how to work around their bugs.
In this fourth video of the Xpdf series, we discuss and demonstrate the PDFinfo utility, which retrieves the contents of a PDF's Info Dictionary, as well as some other information, including the page count. We show how to isolate the page count in a…
Simple Linear Regression

612 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question