Avatar billede suppenudel Nybegynder
19. maj 2006 - 13:41 Der er 11 kommentarer og
1 løsning

Generics Collection List, RemoveAt

Hej..

Jeg har add'et nogle Items/oplysninger til en List Collection, der hedder eks. Id, fornavn, efternavn, telefon.

Så vil jeg gerne gå ind og fjerne det Item/den række hvor Id = 2 for eksempel. Hvordan gør jeg det med RemoveAt?
Avatar billede suppenudel Nybegynder
19. maj 2006 - 14:17 #1
List'en ligger i en session, så jeg prøver at kalde den således:

            bruger = Session("Bruger")
            Dim Id As Integer

Og så noget med

            For Each item As BrugerItem In _Bruger
                If item.Id = 2 Then
                    Bruger.RemoveAt(Id) '**Eller noget i den stil her
                End If
            Next

Håber det giver lidt mere mening..
Avatar billede arne_v Ekspert
19. maj 2006 - 14:31 #2
jeg tror at du skal skifte til Hashtable eller generisk Dictionary !
Avatar billede tuxic Nybegynder
19. maj 2006 - 20:35 #3
Hvorfor er det afgørende at bruge RemoveAt? Hvis du virkelig vil bruge RemoveAt så kan du jo søge i Listen indtil du når den du vil fjerne, notere indekset og så fyre en RemoveAt af.

List har metoden RemoveAll som er en ret elegant måde at løse dit problem på.

Alternativt kan du bruge Dictionary, men om det er smartere afhænger jo af den øvrige kode.
Avatar billede tuxic Nybegynder
19. maj 2006 - 20:37 #4
(Når jeg siger søge igennem, mener jeg enten en gammeldags for-løkke i stedet for en for each, eller hvis listen er sorteret passende, en BinarySearch)
Avatar billede suppenudel Nybegynder
21. maj 2006 - 09:59 #5
Okay - men det skal heller ikke nødvendigvis være RemoveAt, jeg har kigget lidt på metoderne på MSDN, men jeg kunne ikke finde ud af hvilken en jeg skulle bruge samt hvordan jeg skal implementere den.

Jeg forestiller mig at kunne fjerne en række fra listen, ligesom hvis det var fra en database:

DELETE * FROM bruger WHERE ID = 2

Hvordan kan jeg gøre det med RemoveAll?
Avatar billede suppenudel Nybegynder
24. maj 2006 - 16:09 #6
Bare et lile eksempel eller ledetråd? :-)
Avatar billede tuxic Nybegynder
24. maj 2006 - 22:33 #7
Hejsa, beklager det sene svar, men har været optaget af ting derude i virkeligheden.

Dit eksempel fra databasen er glimrende. Man kan (endnu) ikke dette, men det er på tegnebrættet (LINQ, som kommer med .NET 3.0), dvs syntaksen er lille smule anderledes. Men i 2.0 kan man næsten det samme- det udtrykkes bare anderledes. I dit eksempel er 'ID = 2' et prædikat: Det er en funktion der givet et Id returnerer true eller false. Det er samme tanke der ligger bag RemoveAll.

På msdn er der et VB.NET eksempel på hvordan man kan bruge RemoveAll metoden. Jeg kender ikke rigtigt VB.NET, men herunder er et C#-eksempel. (kræver der er en form med 1 knap på).

Men som sagt jeg ville klart bruge RemoveAll.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace WindowsApplication1
{
  public partial class Form1 : Form
  {
    public Form1 ()
    {
      InitializeComponent ();
    }

    private void button1_Click (object sender, EventArgs e)
    {
      // Lav liste og fyld den med stuff
      List<BrugerItem> _brugere = new List<BrugerItem> ();

      _brugere.Add (new BrugerItem (2, "Foo"));
      _brugere.Add (new BrugerItem (1, "Bar"));
      _brugere.Add (new BrugerItem (2, "Baz"));
      _brugere.Add (new BrugerItem (5, "Jimbo"));
      _brugere.Add (new BrugerItem (6, "Hat"));
      _brugere.Add (new BrugerItem (2, "Whack"));

      MessageBox.Show (_brugere.Count.ToString ());

      // Fjern alle BrugerItem med Id = 2 ved at bruge filteret.
      _brugere.RemoveAll (new Predicate<BrugerItem> (Filtrer));

      MessageBox.Show (_brugere.Count.ToString ());
    }

    private static bool Filtrer (BrugerItem bruger)
    {
      if (bruger.Id == 2)
        return true;

      return false;
    }
  }

  public struct BrugerItem
  {
    public int Id;
    public string Navn;

    public BrugerItem (int id, string navn)
    {
      Id = id;
      Navn = navn;
    }
  }
}
Avatar billede suppenudel Nybegynder
25. maj 2006 - 22:42 #8
Det er super, alletiders. Jeg kigger lige på det og vender tilbage. - Skal lige have det til at virke i vb.net :-) - Men hvad, er .NET 3.0 allerede godt på vej, eller er det mig der spørger dumt?
Avatar billede tuxic Nybegynder
25. maj 2006 - 22:58 #9
Såvidt jeg ved varer det et par år endnu en .NET3.0 kommer. (LINQ kan man vist allerede lege med nu i c-omega sproget)
Avatar billede suppenudel Nybegynder
02. juni 2006 - 13:27 #10
Okay, synes også det var noget hurtigt hvis det allerede var på trapperne...
Men dit eksempel er glimrende, så smid et svar så du kan få points :-)
Avatar billede tuxic Nybegynder
02. juni 2006 - 21:59 #11
ok!
Avatar billede suppenudel Nybegynder
04. juni 2006 - 00:25 #12
Jeg takker!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester