Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • World
  • Users
  • Groups
Skins
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Code Project
  1. Home
  2. General Programming
  3. C#
  4. Find unique strings for a string array

Find unique strings for a string array

Scheduled Pinned Locked Moved C#
data-structurestutorialquestion
44 Posts 11 Posters 5 Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • G George_George

    Hello everyone, I have a string array, but may have duplicate strings. Any built-in or smart way to remove the duplicate ones and generate a string array contains only unique ones? For example, the input array is {"abc", "bcd", "abc"}, the unique output array is {"abc", "bcd"}. thanks in advance, George

    I Offline
    I Offline
    Igor Velikorossov
    wrote on last edited by
    #2

    from what I know there's no such thing and you'd have to iterate thru and pick the unique ones manually. it's not that difficult you know ;)

    G 1 Reply Last reply
    0
    • G George_George

      Hello everyone, I have a string array, but may have duplicate strings. Any built-in or smart way to remove the duplicate ones and generate a string array contains only unique ones? For example, the input array is {"abc", "bcd", "abc"}, the unique output array is {"abc", "bcd"}. thanks in advance, George

      D Offline
      D Offline
      dan sh
      wrote on last edited by
      #3

      May be Array.FindAll can help you. Check out MSDN for it. Another way could be: 1. Create a list/hashtable. Then loop through the array. 2. Check if the element exists in the list/hashtable. 3. If it does its a duplicate value. Remove it from array. 4. If it doesnt add it to the list/hashtable.

      C isn't that hard: void (*(*f[])())() defines f as an array of unspecified size, of pointers to functions that return pointers to functions that return void "Always program as if the person who will be maintaining your program is a violent psychopath that knows where you live." - Martin Golding

      G 1 Reply Last reply
      0
      • G George_George

        Hello everyone, I have a string array, but may have duplicate strings. Any built-in or smart way to remove the duplicate ones and generate a string array contains only unique ones? For example, the input array is {"abc", "bcd", "abc"}, the unique output array is {"abc", "bcd"}. thanks in advance, George

        C Offline
        C Offline
        Christian Graus
        wrote on last edited by
        #4

        I dunno why a set class is not included, but it's easy to write one. Just have a list inside, and check if an entry exists before adding it.

        Christian Graus Driven to the arms of OSX by Vista.

        G 1 Reply Last reply
        0
        • G George_George

          Hello everyone, I have a string array, but may have duplicate strings. Any built-in or smart way to remove the duplicate ones and generate a string array contains only unique ones? For example, the input array is {"abc", "bcd", "abc"}, the unique output array is {"abc", "bcd"}. thanks in advance, George

          B Offline
          B Offline
          Brij
          wrote on last edited by
          #5

          You have to iteretae it.You can use some generic for that

          Cheers!! Brij

          G B 2 Replies Last reply
          0
          • B Brij

            You have to iteretae it.You can use some generic for that

            Cheers!! Brij

            G Offline
            G Offline
            George_George
            wrote on last edited by
            #6

            Hi Brij, "some generic for that" -- do you have some more words on this? Or some pseudo code? regards, George

            I 1 Reply Last reply
            0
            • G George_George

              Hello everyone, I have a string array, but may have duplicate strings. Any built-in or smart way to remove the duplicate ones and generate a string array contains only unique ones? For example, the input array is {"abc", "bcd", "abc"}, the unique output array is {"abc", "bcd"}. thanks in advance, George

              G Offline
              G Offline
              Giorgi Dalakishvili
              wrote on last edited by
              #7

              If I'm not mistaken you can use LINQ to select unique values.

              Giorgi Dalakishvili #region signature My Articles Asynchronous Registry Notification Using Strongly-typed WMI Classes in .NET [^] My blog #endregion

              I G 2 Replies Last reply
              0
              • I Igor Velikorossov

                from what I know there's no such thing and you'd have to iterate thru and pick the unique ones manually. it's not that difficult you know ;)

                G Offline
                G Offline
                George_George
                wrote on last edited by
                #8

                Thanks Igor, Good to know .Net does not provide such a class. :-) regards, George

                1 Reply Last reply
                0
                • G George_George

                  Hi Brij, "some generic for that" -- do you have some more words on this? Or some pseudo code? regards, George

                  I Offline
                  I Offline
                  Igor Velikorossov
                  wrote on last edited by
                  #9

                  List<string> newArray = new List<string>();
                  foreach (string token in yourArray)
                  {
                  if (!newArray.Contains(token))
                  {
                  newArray.Add(token);
                  }
                  }

                  G 1 Reply Last reply
                  0
                  • G Giorgi Dalakishvili

                    If I'm not mistaken you can use LINQ to select unique values.

                    Giorgi Dalakishvili #region signature My Articles Asynchronous Registry Notification Using Strongly-typed WMI Classes in .NET [^] My blog #endregion

                    I Offline
                    I Offline
                    Igor Velikorossov
                    wrote on last edited by
                    #10

                    ...yes, assuming he's using .net 3+

                    G 1 Reply Last reply
                    0
                    • C Christian Graus

                      I dunno why a set class is not included, but it's easy to write one. Just have a list inside, and check if an entry exists before adding it.

                      Christian Graus Driven to the arms of OSX by Vista.

                      G Offline
                      G Offline
                      George_George
                      wrote on last edited by
                      #11

                      Thanks Christian, What do you mean "have a list inside"? I am talking about string array, I am not sure where is the list you are talking about. Show some pseudo code? regards, George

                      C 1 Reply Last reply
                      0
                      • G Giorgi Dalakishvili

                        If I'm not mistaken you can use LINQ to select unique values.

                        Giorgi Dalakishvili #region signature My Articles Asynchronous Registry Notification Using Strongly-typed WMI Classes in .NET [^] My blog #endregion

                        G Offline
                        G Offline
                        George_George
                        wrote on last edited by
                        #12

                        LINQ is good, but I have to use .Net 3.0, not .Net 3.5. Any ideas for .Net 3.0 based solution? :-) regards, George

                        1 Reply Last reply
                        0
                        • G George_George

                          Hello everyone, I have a string array, but may have duplicate strings. Any built-in or smart way to remove the duplicate ones and generate a string array contains only unique ones? For example, the input array is {"abc", "bcd", "abc"}, the unique output array is {"abc", "bcd"}. thanks in advance, George

                          D Offline
                          D Offline
                          Dragonfly_Lee
                          wrote on last edited by
                          #13

                          You can use the Distinct method(an Extention Method) if you are using C#3.0 and the implementation code is quit simple, such as: string[] strs = new string[] { "abc", "bcd", "abc" }; IEnumerable newStrs = strs.Distinct(); Hope this will help. LuckyBoy

                          G 1 Reply Last reply
                          0
                          • G George_George

                            Hello everyone, I have a string array, but may have duplicate strings. Any built-in or smart way to remove the duplicate ones and generate a string array contains only unique ones? For example, the input array is {"abc", "bcd", "abc"}, the unique output array is {"abc", "bcd"}. thanks in advance, George

                            M Offline
                            M Offline
                            Mark Churchill
                            wrote on last edited by
                            #14

                            Not sure why people are saying there isn't a built in set class. Use Hashset< string>. Insertion and checking for existing values is roughly O(n). Has extension methods on it for doing linqy kind of things. Also noticed a lot of people said "use linq!". Linq does not make things run faster - it's not a magic replacement for Array.Find. It just makes your code look pretty, thats all :D

                            Mark Churchill Director, Dunn & Churchill Pty Ltd Free Download: Diamond Binding: The simple, powerful, reliable, and effective data layer toolkit for Visual Studio.
                            Alpha release: Entanglar: Transparant multiplayer framework for .Net games.

                            G 1 Reply Last reply
                            0
                            • I Igor Velikorossov

                              ...yes, assuming he's using .net 3+

                              G Offline
                              G Offline
                              George_George
                              wrote on last edited by
                              #15

                              Yes, I have to use .Net 3.0, not .Net 3.5. Any ideas for .Net 3.0 based solution? I think LINQ belongs to .Net 3.5, not .Net 3.0? regards, George

                              1 Reply Last reply
                              0
                              • D Dragonfly_Lee

                                You can use the Distinct method(an Extention Method) if you are using C#3.0 and the implementation code is quit simple, such as: string[] strs = new string[] { "abc", "bcd", "abc" }; IEnumerable newStrs = strs.Distinct(); Hope this will help. LuckyBoy

                                G Offline
                                G Offline
                                George_George
                                wrote on last edited by
                                #16

                                LuckyBoy, Distinct belongs to .Net 3.5, and I have to use .Net 3.0. :-) Any ideas for .Net 3.0? regards, George

                                P 1 Reply Last reply
                                0
                                • G George_George

                                  LuckyBoy, Distinct belongs to .Net 3.5, and I have to use .Net 3.0. :-) Any ideas for .Net 3.0? regards, George

                                  P Offline
                                  P Offline
                                  PIEBALDconsult
                                  wrote on last edited by
                                  #17

                                  George_George wrote:

                                  I have to use .Net 3.0

                                  Then I can't suggest HashSet. :( But I can suggest my Set class. :-D

                                  G 1 Reply Last reply
                                  0
                                  • B Brij

                                    You have to iteretae it.You can use some generic for that

                                    Cheers!! Brij

                                    B Offline
                                    B Offline
                                    Brij
                                    wrote on last edited by
                                    #18

                                    Make a custom function,In which create an a generic as taken below a list. List<string> UnqueList=new List<string>(); for (int i = 0; i < strarr.Length; i++) { if(!UnqueList.Exists(strarr[0])) { UnqueList.Add(strarr[0]); } } Now you'll the list conatining unique elements.You can conert it to array too as UnqueList.ToArray();

                                    Cheers!! Brij

                                    G 1 Reply Last reply
                                    0
                                    • M Mark Churchill

                                      Not sure why people are saying there isn't a built in set class. Use Hashset< string>. Insertion and checking for existing values is roughly O(n). Has extension methods on it for doing linqy kind of things. Also noticed a lot of people said "use linq!". Linq does not make things run faster - it's not a magic replacement for Array.Find. It just makes your code look pretty, thats all :D

                                      Mark Churchill Director, Dunn & Churchill Pty Ltd Free Download: Diamond Binding: The simple, powerful, reliable, and effective data layer toolkit for Visual Studio.
                                      Alpha release: Entanglar: Transparant multiplayer framework for .Net games.

                                      G Offline
                                      G Offline
                                      George_George
                                      wrote on last edited by
                                      #19

                                      Thanks Mark, I think people means no built-in single call for find the uniqueness for string. BTW: if LINQ is slow, why people will use LINQ? regards, George

                                      M D 2 Replies Last reply
                                      0
                                      • P PIEBALDconsult

                                        George_George wrote:

                                        I have to use .Net 3.0

                                        Then I can't suggest HashSet. :( But I can suggest my Set class. :-D

                                        G Offline
                                        G Offline
                                        George_George
                                        wrote on last edited by
                                        #20

                                        What are the advantages of your Set class over .Net Set class? regards, George

                                        P 1 Reply Last reply
                                        0
                                        • I Igor Velikorossov

                                          List<string> newArray = new List<string>();
                                          foreach (string token in yourArray)
                                          {
                                          if (!newArray.Contains(token))
                                          {
                                          newArray.Add(token);
                                          }
                                          }

                                          G Offline
                                          G Offline
                                          George_George
                                          wrote on last edited by
                                          #21

                                          Thanks Igor, I like your solution! :-) regards, George

                                          I 1 Reply Last reply
                                          0
                                          Reply
                                          • Reply as topic
                                          Log in to reply
                                          • Oldest to Newest
                                          • Newest to Oldest
                                          • Most Votes


                                          • Login

                                          • Don't have an account? Register

                                          • Login or register to search.
                                          • First post
                                            Last post
                                          0
                                          • Categories
                                          • Recent
                                          • Tags
                                          • Popular
                                          • World
                                          • Users
                                          • Groups