Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. Delete a QString From QStringList
Forum Updated to NodeBB v4.3 + New Features

Delete a QString From QStringList

Scheduled Pinned Locked Moved Unsolved General and Desktop
17 Posts 8 Posters 11.4k Views 4 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.
  • KroMignonK KroMignon

    @Zunneh said in Delete a QString From QStringList:

    but it didn't work, can i get help ? thanks

    Why you don't simply do this?

    ListName.removeAll("Jon");
    ListName.removeAll("Adam");
    
    
    Z Offline
    Z Offline
    Zunneh
    wrote on last edited by
    #7

    @KroMignon the example i give was bad

    this is the real example, removing names from a QStringList who finish with the letter ' e ' ( if NameList[index].endswith('e') , so there are many names that finish with' e ', removeAll is applied when you know the names, in my case i don't know the Names, the QStringList will append different Names
    did you understand ?

    my english is average, please use simple words and try to be the most explicit, thank you

    JonBJ KroMignonK 2 Replies Last reply
    0
    • Z Zunneh

      @KroMignon the example i give was bad

      this is the real example, removing names from a QStringList who finish with the letter ' e ' ( if NameList[index].endswith('e') , so there are many names that finish with' e ', removeAll is applied when you know the names, in my case i don't know the Names, the QStringList will append different Names
      did you understand ?

      JonBJ Offline
      JonBJ Offline
      JonB
      wrote on last edited by
      #8

      @Zunneh
      In that case, do use the "reverse iteration" (i.e. counting downward) suggested by @mchinand and as per the for loop line I have written above. So long as the remove you have in the if inside it will only remove one row ( if (whatever) ListName.removeAt(index)) then it is good.

      1 Reply Last reply
      1
      • Z Zunneh

        @KroMignon the example i give was bad

        this is the real example, removing names from a QStringList who finish with the letter ' e ' ( if NameList[index].endswith('e') , so there are many names that finish with' e ', removeAll is applied when you know the names, in my case i don't know the Names, the QStringList will append different Names
        did you understand ?

        KroMignonK Offline
        KroMignonK Offline
        KroMignon
        wrote on last edited by
        #9

        @Zunneh said in Delete a QString From QStringList:

        this is the real example, removing names from a QStringList who finish with the letter ' e ' ( if NameList[index].endswith('e') , so there are many names that finish with' e ', removeAll is applied when you know the names, in my case i don't know the Names, the QStringList will append different Names
        did you understand ?

        That is not what you give as implementation!
        One possible solution could be using QStringList::filter():

        const auto toRemove = ListName.filter(QRegularExpression(".*e"));
        for(const auto &item : toRemove)
            ListName.removeAll(item);
        

        or

        const QRegularExpression filter(".*e");
        for(int idx = 0; idx < ListName.size(); ++idx)
        {
            if(ListName.at(idx).contains(filter))
            {
                ListName.remove(idx);
                --idx;
            }
        }
        

        It is an old maxim of mine that when you have excluded the impossible, whatever remains, however improbable, must be the truth. (Sherlock Holmes)

        Z 1 Reply Last reply
        4
        • KroMignonK KroMignon

          @Zunneh said in Delete a QString From QStringList:

          this is the real example, removing names from a QStringList who finish with the letter ' e ' ( if NameList[index].endswith('e') , so there are many names that finish with' e ', removeAll is applied when you know the names, in my case i don't know the Names, the QStringList will append different Names
          did you understand ?

          That is not what you give as implementation!
          One possible solution could be using QStringList::filter():

          const auto toRemove = ListName.filter(QRegularExpression(".*e"));
          for(const auto &item : toRemove)
              ListName.removeAll(item);
          

          or

          const QRegularExpression filter(".*e");
          for(int idx = 0; idx < ListName.size(); ++idx)
          {
              if(ListName.at(idx).contains(filter))
              {
                  ListName.remove(idx);
                  --idx;
              }
          }
          
          Z Offline
          Z Offline
          Zunneh
          wrote on last edited by Zunneh
          #10

          @KroMignon yeah after asking the question, i was in the kitchen and it comes on my mind to do indexx -- if he delete one item ( like the second solution )
          on more question, can we put more than one filter ? for example delete name s who finish with 'e', 'y' and 'm' ??

          @JonB i wil try your solution too

          finosh wo

          Thanks guys :)

          my english is average, please use simple words and try to be the most explicit, thank you

          JonBJ KroMignonK 2 Replies Last reply
          0
          • Z Zunneh

            @KroMignon yeah after asking the question, i was in the kitchen and it comes on my mind to do indexx -- if he delete one item ( like the second solution )
            on more question, can we put more than one filter ? for example delete name s who finish with 'e', 'y' and 'm' ??

            @JonB i wil try your solution too

            finosh wo

            Thanks guys :)

            JonBJ Offline
            JonBJ Offline
            JonB
            wrote on last edited by JonB
            #11

            @Zunneh said in Delete a QString From QStringList:

            on more question, can we put more than one filter ? for example delete name s who finish with 'e', 'y' and 'm' ??

            I have not looked to see if accepted, but I would guess either of

            const QRegularExpression filter(".*[eym]");
            const QRegularExpression filter(".*(e|y|m)");
            

            (I assume you mean "finish with 'e', 'y' or 'm'"!). Regular expression [abc] means any one letter of, (ab|c|def) has to be used if multiple letter sequences required.

            1 Reply Last reply
            0
            • Z Zunneh

              @KroMignon yeah after asking the question, i was in the kitchen and it comes on my mind to do indexx -- if he delete one item ( like the second solution )
              on more question, can we put more than one filter ? for example delete name s who finish with 'e', 'y' and 'm' ??

              @JonB i wil try your solution too

              finosh wo

              Thanks guys :)

              KroMignonK Offline
              KroMignonK Offline
              KroMignon
              wrote on last edited by
              #12

              @Zunneh said in Delete a QString From QStringList:

              on more question, can we put more than one filter ? for example delete name s who finish with 'e', 'y' and 'm' ??

              This is a regular expression, so it is up to you to set it up to match your needs.
              For 'e', 'y' and 'm' it would be: const QRegularExpression filter(".*(e|y|m)");
              Take a look at https://www.jrebel.com/sites/rebel/files/pdfs/regular-expressions-cheat-sheet.pdf

              It is an old maxim of mine that when you have excluded the impossible, whatever remains, however improbable, must be the truth. (Sherlock Holmes)

              1 Reply Last reply
              1
              • VRoninV Offline
                VRoninV Offline
                VRonin
                wrote on last edited by VRonin
                #13

                stl-iterators are safe for calling erase on. The Qt functionality is identical to the one of std::vector.
                Given a generic function bool shouldIDeleteThisString(const QString&) that returns true if the string should be removed from the list you can use:

                for(auto i = list.begin(); i!=list.end();){
                    if(shouldIDeleteThisString(*i))
                        i=list.erase(i);
                    else
                        ++i;
                }
                

                "La mort n'est rien, mais vivre vaincu et sans gloire, c'est mourir tous les jours"
                ~Napoleon Bonaparte

                On a crusade to banish setIndexWidget() from the holy land of Qt

                Christian EhrlicherC 1 Reply Last reply
                4
                • VRoninV VRonin

                  stl-iterators are safe for calling erase on. The Qt functionality is identical to the one of std::vector.
                  Given a generic function bool shouldIDeleteThisString(const QString&) that returns true if the string should be removed from the list you can use:

                  for(auto i = list.begin(); i!=list.end();){
                      if(shouldIDeleteThisString(*i))
                          i=list.erase(i);
                      else
                          ++i;
                  }
                  
                  Christian EhrlicherC Offline
                  Christian EhrlicherC Offline
                  Christian Ehrlicher
                  Lifetime Qt Champion
                  wrote on last edited by
                  #14

                  @VRonin since you're doing iterator fun:

                  list.erase(std::remove_if(list.begin(), list.end(), shouldIDeleteThisString), list.end());
                  

                  Qt Online Installer direct download: https://download.qt.io/official_releases/online_installers/
                  Visit the Qt Academy at https://academy.qt.io/catalog

                  JonBJ 1 Reply Last reply
                  7
                  • Christian EhrlicherC Christian Ehrlicher

                    @VRonin since you're doing iterator fun:

                    list.erase(std::remove_if(list.begin(), list.end(), shouldIDeleteThisString), list.end());
                    
                    JonBJ Offline
                    JonBJ Offline
                    JonB
                    wrote on last edited by
                    #15

                    @Christian-Ehrlicher
                    Indeed, because I looked it up, but it doesn't make it readable, or the way it works very intelligible, IMHO! :)

                    aha_1980A 1 Reply Last reply
                    0
                    • JonBJ JonB

                      @Christian-Ehrlicher
                      Indeed, because I looked it up, but it doesn't make it readable, or the way it works very intelligible, IMHO! :)

                      aha_1980A Offline
                      aha_1980A Offline
                      aha_1980
                      Lifetime Qt Champion
                      wrote on last edited by
                      #16

                      @JonB

                      but it doesn't make it readable

                      Get used to it, that's the preferred C++ way nowadays ("functional programming").

                      Regards

                      Qt has to stay free or it will die.

                      kshegunovK 1 Reply Last reply
                      1
                      • aha_1980A aha_1980

                        @JonB

                        but it doesn't make it readable

                        Get used to it, that's the preferred C++ way nowadays ("functional programming").

                        Regards

                        kshegunovK Offline
                        kshegunovK Offline
                        kshegunov
                        Moderators
                        wrote on last edited by
                        #17

                        @aha_1980 said in Delete a QString From QStringList:

                        Get used to it, that's the preferred C++ way nowadays ("functional programming").

                        The major reason for the mortality rise in the developers demographics ... jumping off a tall building ain't no fun ...

                        Read and abide by the Qt Code of Conduct

                        1 Reply Last reply
                        3

                        • Login

                        • Login or register to search.
                        • First post
                          Last post
                        0
                        • Categories
                        • Recent
                        • Tags
                        • Popular
                        • Users
                        • Groups
                        • Search
                        • Get Qt Extensions
                        • Unsolved