Avatar billede websam Nybegynder
01. marts 2006 - 17:23 Der er 19 kommentarer og
1 løsning

Søgning igennem en arrayliste ?

Hejsa,

Jeg mangler lidt viden om hvordan jeg søger i en arrayliste. Jeg generere den ved at hente en bunke data i databasen og smidder det i cache.

Jeg vil så gerne kunne søge igennem arraylisten efter f.eks. et bestemt id hvordan gør jeg det ?

/Websam
Avatar billede dr_chaos Nybegynder
01. marts 2006 - 17:26 #1
foreach(object o in DinArrayListe.Items)
{
//typecase o til det objekt du har gemt
}
Avatar billede websam Nybegynder
01. marts 2006 - 17:34 #2
Ok, lad os forestille os at min arryliste indeholder følgende :

Id
Fornavn
Efternavn
Email

Jeg skal så finde en bestemt record hvor id'et = id'et fra f.eks Request.QueryString("id") hvordan skal det så se ud hvis jeg vil udskrive resultatet i nogle labels ?

/Websam
Avatar billede dr_chaos Nybegynder
01. marts 2006 - 17:39 #3
hvordan gemmer du tingene i arraylisten ?
har du en klasse med properties hvor du gemmer en instans af denne i arraylisten ?
Avatar billede websam Nybegynder
01. marts 2006 - 17:44 #4
Det gør jeg sådan her :

While Dr.Read
    Dim objInfo As NewsletterInfo.Info = New NewsletterInfo.Info
    objInfo.Id = Convert.ToInt32(Dr("Id"))
    objInfo.Name = Convert.ToString(Dr("Name"))
    objInfo.Email = Convert.ToString(Dr("Email"))
    objInfo.TheDate = Convert.ToString(Dr("TheDate"))
    objList.Add(objInfo)
End While
Avatar billede websam Nybegynder
01. marts 2006 - 17:45 #5
eller i C# :

while (Dr.Read) {
NewsletterInfo.Info objInfo = new NewsletterInfo.Info();
objInfo.Id = Convert.ToInt32(Dr("Id"));
objInfo.Name = Convert.ToString(Dr("Name"));
objInfo.Email = Convert.ToString(Dr("Email"));
objInfo.TheDate = Convert.ToString(Dr("TheDate"));
objList.Add(objInfo);
}
Avatar billede dr_chaos Nybegynder
01. marts 2006 - 17:47 #6
foreach(object o in DinArrayListe.Items)
{
NewsletterInfo.Info objInfo = (NewsletterInfo.Info)o;
if(objInfo.Id == ettal)
{
//gør et eller andet.
break;
}

}
Avatar billede websam Nybegynder
01. marts 2006 - 17:59 #7
Ok der er et par ting som ikke helt er rigtigt min kode bliver noget i denne stil i vb :

Dim objList As ArrayList = objBLL.GetAll()
        For Each o As Object In objList.Item(0)
            objInfo = CType(o, NewsletterInfo.Info)
            If objInfo.Id = 2 Then
                Response.Write(objInfo.Name & "-" & objInfo.Email)
            End If
        Next

men for det første er der ikke noget der heder Items som du har i din kode og for det andet får jeg en fejl der siger :

    Specified cast is not valid.

I denne linie :

  For Each o As Object In objList.Item(0)

hvad skyldes det ?
Avatar billede websam Nybegynder
01. marts 2006 - 18:13 #8
Denne linie :

    For Each o As Object In objList.Item(0)

Skulle være

    For Each o As Object In objList

Så virker det ;o)
Avatar billede arne_v Ekspert
01. marts 2006 - 18:57 #9
Hvis du har en "god" Equals metode i din NewsletterInfo.Info klasse, saa burde
du faktisk kunne bruge IndexOf

(den goer det samme, saa den er ikke hurtigere, men ...)
Avatar billede dr_chaos Nybegynder
01. marts 2006 - 19:12 #10
smider lige et svar :)
spørg hvis det ikke virkede
Avatar billede websam Nybegynder
01. marts 2006 - 21:15 #11
dr_chaos >> Det virkede fint med den lille ændring jeg fik lavet ovenfor ;o)

arne_v >> Fortæl lidt mere om det med "Equals Metode" hvis du har tiden til det.

/Websam
Avatar billede arne_v Ekspert
01. marts 2006 - 21:32 #12
Imports System
Imports System.Collections

Namespace E
    Public Class Foobar
        Private iv As Integer
        Private sv As String
        Public Sub New()
            MyClass.New(0, "")
        End Sub
        Public Sub New(ByVal iv As Integer)
            MyClass.New(iv, "")
        End Sub
        Public Sub New(ByVal iv As Integer, ByVal sv As String)
            Me.iv = iv
            Me.sv = sv
        End Sub
        Public Overloads Overrides Function ToString() As String
            Return ("[" & iv & "," & sv & "]")
        End Function
        Public Overloads Overrides Function Equals(ByVal o As Object) As Boolean
            Return (iv = CType(o, Foobar).iv)
        End Function
        Public Overloads Overrides Function GetHashCode() As Integer
            Return iv.GetHashCode
        End Function
    End Class

    Class MainClass
        Public Shared Sub Main(ByVal args As String())
            Dim lst As ArrayList = New ArrayList
            lst.Add(New Foobar(1, "A"))
            lst.Add(New Foobar(2, "BB"))
            lst.Add(New Foobar(3, "CCC"))
            Dim ix As Integer = lst.IndexOf(New Foobar(2))
            If ix >= 0 Then
                Console.WriteLine(lst(ix))
            Else
                Console.WriteLine("Not found")
            End If
        End Sub
    End Class
End Namespace
Avatar billede websam Nybegynder
01. marts 2006 - 22:15 #13
Jeg laver lige en ny tråd da jeg har par enkelte spørgsmål til dette ;o)

http://www.eksperten.dk/spm/691978
Avatar billede snepnet Nybegynder
01. marts 2006 - 23:27 #14
er du ikke begyndt på 2.0?
mvh
Avatar billede websam Nybegynder
01. marts 2006 - 23:34 #15
Hvad tænker du på ?
Avatar billede dr_chaos Nybegynder
01. marts 2006 - 23:44 #16
vil også gerne vide det :)
Avatar billede snepnet Nybegynder
01. marts 2006 - 23:53 #17
at en arraylist ikke nødvendigvis er interessant i 2.0 - generics er en mulighed:

du kan se et lille eksempel her:

using System;
using System.Collections.Generic;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            List<Person> persons = new List<Person>();
            persons.Add(new Person("hans"));
            persons.Add(new Person("grete"));
            persons.Add(new Person("keld"));

            Person person = persons.Find(
                delegate(Person p)
                {
                    if (p.Name == "hans")
                        return true;
                    return false;
                });
            Console.WriteLine(person.Name);
            Console.Read();
        }
    }

    public class Person
    {
        private string _name;

        public string Name
        {
            get { return _name; }
            set { _name = value; }
        }

        public Person(string name)
        {
            _name = name;
        }
    }
}

ikke fordi eksemplet er noget synderligt værd - men det skulle gerne illustrere at du kan finde hvad som helst i din liste.

mvh
Avatar billede snepnet Nybegynder
01. marts 2006 - 23:54 #18
æhhh... så hvis det ikke gør det må du lige sige til :o)
mvh
Avatar billede arne_v Ekspert
01. marts 2006 - 23:57 #19
generics er vel stort set ligegyldigt i problem stillinge med at finde

pointen er vel den Find metod med en delegate

som er ganske smart
Avatar billede websam Nybegynder
07. marts 2006 - 13:30 #20
snepnet >> har du mulighed for at oversætte ovenstående til vb.net ?
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