Plateforme Level Extreme
Abonnement
Profil corporatif
Produits & Services
Support
Légal
English
Stack has a reverse method - which does not seem to work
Message
De
25/07/2009 11:05:53
 
 
À
25/07/2009 08:25:47
Information générale
Forum:
ASP.NET
Catégorie:
Code, syntaxe and commandes
Versions des environnements
Environment:
C# 3.0
Divers
Thread ID:
01407785
Message ID:
01414474
Vues:
32
Worked for me:
Stack<string> s = new Stack<string>();
            s.Push("A");
            s.Push("B");
            s.Push("C");  // C,B,A
            s.Reverse();  // A,B,C
>I have created a couple of extension methods that can reverse a Queue or a Stack
>
>Queue
>
>// Queue_EnQueue.cs
>
>	public static partial class ExtensionMethods_Queue
>	{
>		//______________________________________________________________________
>		/// <summary>
>		/// Enqueues a sequence of items of IEnumerable(T)
>		/// </summary>
>		/// <typeparam name="T"></typeparam>
>		/// <param name="queue"></param>
>		/// <param name="items">IEnumerable(T)</param>
>		public static void Enqueue<T>(this Queue<T> queue, IEnumerable<T> items)
>		{
>			queue.Enqueue(items, false);
>		}
>		//______________________________________________________________________
>		/// <summary>
>		/// Enqueues a sequence of items of IEnumerable(T)
>		/// </summary>
>		/// <typeparam name="T"></typeparam>
>		/// <param name="queue"></param>
>		/// <param name="items">IEnumerable(T)</param>
>		/// <param name="reversed">reverse the sequence of IEnumerable(T) before Enqueue</param>		
>		public static void Enqueue<T>(
>				this Queue<T> queue, 
>				IEnumerable<T> items, 
>				bool reversed
>			)
>		{
>			if (reversed)
>				items = items.Reverse();
>
>			foreach (T item in items)
>				queue.Enqueue(item);
>
>		}
>		//______________________________________________________________________
>	}
>
>// Queue_Reverse.cs
>	public static partial class ExtensionMethods_Queue
>	{
>		//______________________________________________________________________
>		/// <summary>
>		/// reverses the elements in place
>		/// </summary>
>		/// <param name="queue"></param>
>		/// <returns>the same queue</returns>
>		public static Queue<T> Reverse<T>(this Queue<T> queue)
>		{
>			// (1) copy contents to new array
>			var contents = new T[queue.Count];
>			queue.CopyTo(contents, 0);
>
>			// (2) Clear the queue
>			queue.Clear();
>
>			// (3) enqueue the array
>			queue.Enqueue(contents, true);
>
>			return queue;
>
>		}
>		//______________________________________________________________________
>	}
>
>
>
>
>Stack
>
>// Stack_push.cs
>	public static partial class ExtensionMethods_Stack
>	{
>		//______________________________________________________________________
>		/// <summary>
>		/// Pushes a sequence of items of IEnumerable(T)
>		/// </summary>
>		/// <typeparam name="T"></typeparam>
>		/// <param name="stack"></param>
>		/// <param name="items">IEnumerable(T)</param>
>		public static void Push<T>(this Stack<T> stack, IEnumerable<T> items)
>		{
>			stack.Push(items, false);
>		}
>		//______________________________________________________________________
>		/// <summary>
>		/// 
>		/// </summary>
>		/// <typeparam name="T"></typeparam>
>		/// <param name="stack"></param>
>		/// <param name="items">IEnumerable(T)</param>
>		/// <param name="reversed">reverse the sequence of IEnumerable(T) before Enqueue</param>
>		public static void Push<T>(this Stack<T> stack, IEnumerable<T> items, bool reversed)
>		{
>			if (reversed)
>				items = items.Reverse();
>
>			foreach (T item in items)
>				stack.Push(item);
>
>		}
>		//______________________________________________________________________
>	}
>
>// Stack_Reverse.cs
>	public static partial class ExtensionMethods_Stack
>	{
>		//______________________________________________________________________
>		/// <summary>
>		/// Reverses the stack
>		/// </summary>
>		/// <typeparam name="T"></typeparam>
>		/// <param name="stack"></param>
>		/// <returns>the stack</returns>
>		public static Stack<T> Reverse<T>(this Stack<T> stack)
>		{
>			// Copy contents to array
>			var contents = new T[stack.Count];
>			stack.CopyTo(contents, 0);
>
>			// Clear the stack
>			stack.Clear();
>
>			stack.Push(contents);
>
>			return stack;
>		}
>		//______________________________________________________________________
>	}
>
Précédent
Suivant
Répondre
Fil
Voir

Click here to load this message in the networking platform