Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


ArrayList problem

Postades av 2004-08-03 21:10:08 - Jesper Brännström, i forum c# (c-sharp), Tråden har 12 Kommentarer och lästs av 1151 personer

jag har i min kod en loop där jag sparar ner en struct med data i en ArrayList. Problemet nu är hur man gör för att läsa från den.

Jag har en timer där jag vill läsa det första objektet som sattes in i ArrayListen för varje gång timern körs. När datan är läst så vill jag även ta bort den datan från arraylisten.

Hoppas ni förstår hur jag menar.

MVH Jesper


Svara

Sv: ArrayList problem

Postades av 2004-08-03 22:26:45 - Per Hultqvist

Eftersom du vill ta bort datan efter läsning så ska du inte använda en ArrayList utan en Queue eller Stack. Båda dessa finns i System.Collection-namespacet.
<info>
Queue : FIFO = First In First Out, dvs som en kö till en kassa i affären. Den som ställde sig i kön först blir först betjänad.

Stack : LIFO = Last In First Out, dvs ungefär som en tallriksautomat som man ser på vissa restauranger, där man lägger tallrikar som hålls uppe av en fjäder. Lägger man till en tallrik så är det den första som tas bort från högen.
</info>

Hoppas att du förstår skillnaden.


Svara

Sv: ArrayList problem

Postades av 2004-08-04 08:27:35 - Roger Alsing

private void timer_Tick(object s,eventargs e)
{
MyStruct ms=(MyStruct)MyArrayList[0];
MyArrayList.RemoveAt(0);
//gör någe kul med ms
}

//Roger


Svara

Sv: ArrayList problem

Postades av 2004-08-04 12:36:48 - Johan Normén

DoRsal

Hej, Vad du kan göra är att istället för ArrayLiust använda Queue classen. På så vis kommer översta posten alltid plockas ut med automatik.

Du har två metoder, Enqueue som lägger till saker i kön efter FIFO, för att plocka ut kör du Dequeue som då tar första posten och plockar bort den från Queue objektets collection.

<code>
Dim myQ As New Queue()
myQ.Enqueue("Hello")
myQ.Enqueue("World")
myQ.Enqueue("!")
</code>
=

0: Hello
1: World
2: !

<code>
object someObject myQ.Dequeue()
</code>

someObject blir Hello
och myQ har nu:

0: World
1: !

Med COunt kan du se hur stor din Queue är, med Peek metoden kan du plocka ut toppen för att titta på den utan att den raderas från din kö.

Mvh Johan


Svara

Sv: ArrayList problem

Postades av 2004-08-04 15:24:18 - Roger Alsing

bara en observation.

queue verkar vara redigt sunkigt skriven..
den använder en intern object[] som växer med 4 poster för var 4e sak som addas till den..
måste ge fruktat sunkiga prestanda om man lägger till stora mängder fort..

en vanlig simpel länkad lista måste väl iaf vara mer lämpad för att implementera en köklass (?)
där har man ju alltid tillgång till första och sista posten utan någon overhead och dessutom så kan man både lägga till och ta bort i början och slutet utan att någon array behvöver allokeras om.

//Roger


Svara

Sv: ArrayList problem

Postades av 2004-08-04 15:52:25 - Andreas Håkansson

Som Roggan säger så är juh självklart en linked-list den mest lämpade implementationen för en Queue.. dumt att använda en array *blää* =)


Svara

Sv: ArrayList problem

Postades av 2004-08-04 18:03:37 - Per Hultqvist

Roggan och Andreas :

Det finns en konstruktor som delvis tar hand om problemet med många poster :
<info>
new Queue(capacity as Integer,growFactor as Single)
</info>


Svara

Sv: ArrayList problem

Postades av 2004-08-04 18:48:00 - Jesper Brännström

Tack för alla svar. Prestanda är inget viktigt i det jag ska göra då det max handlar om kanske 20 tal som ska sparas i kö. Jag har nu avänt mig av Queue och det fungerar precis så som jag tänkt mig. Tack för alla tipsen.

Skulle däremot vara lite intressant om ni kunde förklara linked list lite bättre och kanske med något kodexempel.


Svara

Sv: ArrayList problem

Postades av 2004-08-04 18:49:07 - Andreas Håkansson

Hultan,

Japp men enbart, som du säger, delvis. Att skapa en länkad lista och en FIFO är döö enkelt. Kan förstå om man inte tycker det om man inte gjort det tidigare, men det finns tillräckligt med exempel och information om det på nätet för att kunna läsa på.. obs inte riktat till dig...ja inte till någon egentligen =)


Svara

Sv: ArrayList problem

Postades av 2004-08-04 19:22:28 - Fredrik Normén

Andreas:

Det finns inget fel att använda en QueueAsArray, den enda nackdelen är att kön måste öka sin kapacitet när kön blir full, men sätter man initierar du en kö med ett förbestämt antal items så fungerar array utmärkt. Det är ingen större prestanda skillnand mellan en QueueAsArray och en QueueAsLinkedList mer än att QueueAsArray måste ev öka sin kapacitet (Skapa en ny array och kopiera det tidigare innehållet till den nya, men då används ofta en ökningsfaktor som sätter den nya arrayens storlek till den tillfälliga storleken*2. Ökningsfaktorn beror ofta på den som implementerar kön) om den interna arrayen är förliten.

Vill även nämna att Queue klassen som finns i .Net använder sig av en array internet och inte en länkad lista. Även Queue<T> i .Net 2.0 använder sig av en array internt.

/Fredrik Normén NSQUARED2
http://fredrik.nsquared2.com


Svara

Sv: ArrayList problem (LinkedList kodexempel)

Postades av 2004-08-05 02:26:10 - Per Hultqvist

> <b>Skulle däremot vara lite intressant om ni kunde förklara linked list lite bättre och kanske med något kodexempel.</b>

Tja, kände för att koda några rader innan det är dags att natta sig själv. För att få ned antalet rader så har jag använt public fields i stället för properties som är snyggare. Det finns kanske bättre sätt att koda en länkad lista på, det är nästan 10 år sedan jag studerade algoritmer i skolan. Hur som helst så ger det väl dig en idé om hur det skulle kunna se ut i alla fall. Observera att jag har använt en variabel av datatypen Object för att hålla den faktiska datan i varje nod. Du kan (bör) byta ut detta mot den datatyp du själv vill använda eller vänta på generics i C# 2.0 :-)

Klassen Node - Innehåller information om föregående nod, nästa nod samt nodens data (Value)

using System;

namespace LinkedList
{
	public class Node
	{
		public Node NextNode=null;		// Sparar några rader kod genom att använda 
		public Node PreviousNode=null;	// public field i stället för property

		private object Value=null;		// Ändra datatyp för optimerad LinkedList

		public Node(object theValue)
		{
			Value=theValue;
		}
		public void Delete()
		{
			NextNode.PreviousNode=PreviousNode;
			PreviousNode.NextNode=NextNode;
		}

		public override string ToString()
		{
			return Value.ToString ();
		}
	}
}

Klassen LinkedList - Huvudklassen
using System;

namespace LinkedList
{
	/// <summary>
	/// Summary description for LinkedList.
	/// </summary>
	public class LinkedList
	{
		public Node FirstNode=null;	// Ändra till property
		public Node LastNode=null;	// Ändra till property

		public LinkedList()
		{
		}

		public Node AddFirst(object Value)
		{
			Node node=new Node(Value);
			node.PreviousNode=null;		// Första noden har ingen föregående nod

			if (FirstNode==null)		// Listan är tom
			{
				node.NextNode=null;
				LastNode=node;
				FirstNode=node;
			}
			else
			{
				FirstNode.PreviousNode=node;
				node.NextNode=FirstNode;
				FirstNode=node;
			}
			return node;
		}

		public Node AddLast(object Value)
		{
			Node node=new Node(Value);
			node.NextNode=null;			// Sista noden har ingen nästa nod

			if (LastNode==null)		// Listan är tom
			{
				node.PreviousNode=null;
				LastNode=node;
				FirstNode=node;
			}
			else
			{
				LastNode.NextNode=node;
				node.PreviousNode=LastNode;
				LastNode=node;
			}
			return node;
		}
	}
}

Testkod
		private void PrintList(LinkedList.LinkedList list)
		{
			LinkedList.Node n=list.FirstNode;
			while (n!=null)
			{
				Console.WriteLine(n.ToString());
				n=n.NextNode;
			}
			Console.WriteLine("---------------------");
		}
		private void button1_Click(object sender, System.EventArgs e)
		{
			LinkedList.LinkedList list=new LinkedList.LinkedList();
			list.AddFirst("Per");
			PrintList(list);
			list.AddFirst("Joakim");
			PrintList(list);
			list.AddLast("Kalle");
			PrintList(list);
			list.AddFirst("Adam");
			PrintList(list);
		}


Svara

Nyligen

  • 09:09 Vill du köpa medicinska tester?
  • 12:47 Vem beviljar assistansen – kommune
  • 14:17 Någon med erfarenhet av hemstädnin
  • 14:14 Bör man använda sig av en båtförme
  • 14:12 Finns det någon intressant hundblo
  • 14:25 Tips på verktyg för att skapa QR-k
  • 14:23 Tips på verktyg för att skapa QR-k
  • 20:52 Fungerer innskuddsbonuser egentlig

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 569 153
27 952
271 704
872
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies