.NET 幫助

C# 隊列(開發人員如何工作)

發佈 2024年1月4日
分享:

1. 介紹

在程式設計領域中,高效的資料處理是成功軟體開發的基石。 在管理和組織資訊中扮演重要角色的一個基本資料結構是佇列。 在 C# 的上下文中,C# Queue 作為一種強大且多功能的程式語言,突出為管理順序資料的基本工具。 若想深入了解 C# 中的隊列,以下是推薦的文章:C# 中的佇列.NET 中的通用隊列類別.

隊列遵循先入先出原則(先入先出)原則上,先入者先出,先添加的元素是最先被移除的。 這個特性在需要按特定順序處理資料或物件的情況下特別有用,例如以系統化的方式處理任務或在網路伺服器中管理請求。

在本文中,我們將使用C# PDF庫IronPDF使用C#隊列。

2. C# Queue 的類型和用途

2.1. 標準佇列

C# 中的標準佇列是一個泛型類別,允許開發者創建可釋出任何資料類型的佇列。 它提供了像 Enqueue 這樣的方法,用於在佇列的開頭或結尾向指定對象添加元素,以及 Dequeue 方法,用於從前面移除元素。 這種類型的隊列廣泛應用於數據處理遵循嚴格順序的場景,確保資源分配的公平性。

using System;
using System.Collections.Generic;
class Program
{
    static void Main()
    {   
        // create an empty queue
        Queue<int> standardQueue = new Queue<int>();
        standardQueue.Enqueue(10);
        standardQueue.Enqueue(20);
        standardQueue.Enqueue(30);
        while (standardQueue.Count > 0)
        {
            int element = standardQueue.Dequeue();
            Console.WriteLine($"Dequeued: {element}");
        }
    }
}
using System;
using System.Collections.Generic;
class Program
{
    static void Main()
    {   
        // create an empty queue
        Queue<int> standardQueue = new Queue<int>();
        standardQueue.Enqueue(10);
        standardQueue.Enqueue(20);
        standardQueue.Enqueue(30);
        while (standardQueue.Count > 0)
        {
            int element = standardQueue.Dequeue();
            Console.WriteLine($"Dequeued: {element}");
        }
    }
}
Imports System
Imports System.Collections.Generic
Friend Class Program
	Shared Sub Main()
		' create an empty queue
		Dim standardQueue As New Queue(Of Integer)()
		standardQueue.Enqueue(10)
		standardQueue.Enqueue(20)
		standardQueue.Enqueue(30)
		Do While standardQueue.Count > 0
			Dim element As Integer = standardQueue.Dequeue()
			Console.WriteLine($"Dequeued: {element}")
		Loop
	End Sub
End Class
VB   C#

輸出

C# 佇列(對開發人員的運作方式):圖1 - 輸出:標準佇列

2.2. 優先佇列

在某些情況下,優先考慮隊列中的元素變得至關重要。 C# 沒有內建的優先佇列,但開發人員可以通過使用排序集合或自定義資料結構來實現。 這種類型的隊列在需要根據特定標準(例如緊急性或重要性)提前處理某些元素時非常有用。 它檢查元素是否存在,並使用先入先出(FIFO)方式將最舊的元素排列到隊列的末尾,同時根據包含的元素數量來確定一個元素是否應成為隊列的開頭。

using System;
using System.Collections.Generic;
class Program
{    
    static void Main()
    {
        SortedSet<int> priorityQueue = new SortedSet<int>();
        priorityQueue.Add(30);
        priorityQueue.Add(10);
        priorityQueue.Add(20);
        while (priorityQueue.Count > 0)
        {
            int element = priorityQueue.Min;
            priorityQueue.Remove(element);
            Console.WriteLine($"Priority Queue Dequeued: {element}");
        }
    }
}
using System;
using System.Collections.Generic;
class Program
{    
    static void Main()
    {
        SortedSet<int> priorityQueue = new SortedSet<int>();
        priorityQueue.Add(30);
        priorityQueue.Add(10);
        priorityQueue.Add(20);
        while (priorityQueue.Count > 0)
        {
            int element = priorityQueue.Min;
            priorityQueue.Remove(element);
            Console.WriteLine($"Priority Queue Dequeued: {element}");
        }
    }
}
Imports System
Imports System.Collections.Generic
Friend Class Program
	Shared Sub Main()
		Dim priorityQueue As New SortedSet(Of Integer)()
		priorityQueue.Add(30)
		priorityQueue.Add(10)
		priorityQueue.Add(20)
		Do While priorityQueue.Count > 0
			Dim element As Integer = AddressOf priorityQueue.Min
			priorityQueue.Remove(element)
			Console.WriteLine($"Priority Queue Dequeued: {element}")
		Loop
	End Sub
End Class
VB   C#

C# 佇列(開發者如何使用):圖2 - 輸出:優先佇列

2.3 圓形佇列

循環隊列是一種變體,其中最後一個元素連接到第一個元素,形成一個環形結構。 這在佇列具有固定大小的情況下可能是有利的,因為需要以循環方式用新的元素替換舊的佇列元素。 在 C# 中實作環形佇列可以優化記憶體使用並確保高效的數據處理。

using System;
// Queue class
class CircularQueue
{
    private int[] array;
    private int front, rear, size;
    public CircularQueue(int size)
    {
        this.size = size;
        array = new int[size];
        front = rear = -1;
    }

    // enqueue method
    public void Enqueue(int item)
    {
        if ((front == 0 && rear == size - 1) 
 (rear == (front - 1) % (size - 1)))
        {
            Console.WriteLine("Queue is full");
            return;
        }
        else if (front == -1)
        {
            front = rear = 0;
            array[rear] = item;
        }
        else if (rear == size - 1 && front != 0)
        {
            rear = 0;
            array[rear] = item;
        }
        else
        {
            rear++;
            array[rear] = item;
        }
    }
    public int Dequeue()
    {
        if (front == -1)
        {
            Console.WriteLine("Queue is empty");
            return -1;
        }
        int item = array[front];
        array[front] = -1;
        if (front == rear)
            front = rear = -1;
        else if (front == size - 1)
            front = 0;
        else
            front++;
        return item;
    }
}
class Program
{
    static void Main()
    {   
        // specified initial capacity 5
        CircularQueue circularQueue = new CircularQueue(5);
        circularQueue.Enqueue(10);
        circularQueue.Enqueue(20);
        circularQueue.Enqueue(30);
        Console.WriteLine($"Circular Queue Dequeued: {circularQueue.Dequeue()}");
        Console.WriteLine($"Circular Queue Dequeued: {circularQueue.Dequeue()}");
    }
}
using System;
// Queue class
class CircularQueue
{
    private int[] array;
    private int front, rear, size;
    public CircularQueue(int size)
    {
        this.size = size;
        array = new int[size];
        front = rear = -1;
    }

    // enqueue method
    public void Enqueue(int item)
    {
        if ((front == 0 && rear == size - 1) 
 (rear == (front - 1) % (size - 1)))
        {
            Console.WriteLine("Queue is full");
            return;
        }
        else if (front == -1)
        {
            front = rear = 0;
            array[rear] = item;
        }
        else if (rear == size - 1 && front != 0)
        {
            rear = 0;
            array[rear] = item;
        }
        else
        {
            rear++;
            array[rear] = item;
        }
    }
    public int Dequeue()
    {
        if (front == -1)
        {
            Console.WriteLine("Queue is empty");
            return -1;
        }
        int item = array[front];
        array[front] = -1;
        if (front == rear)
            front = rear = -1;
        else if (front == size - 1)
            front = 0;
        else
            front++;
        return item;
    }
}
class Program
{
    static void Main()
    {   
        // specified initial capacity 5
        CircularQueue circularQueue = new CircularQueue(5);
        circularQueue.Enqueue(10);
        circularQueue.Enqueue(20);
        circularQueue.Enqueue(30);
        Console.WriteLine($"Circular Queue Dequeued: {circularQueue.Dequeue()}");
        Console.WriteLine($"Circular Queue Dequeued: {circularQueue.Dequeue()}");
    }
}
Imports System
' Queue class
Friend Class CircularQueue
	Private array() As Integer
	Private front, rear, size As Integer
	Public Sub New(ByVal size As Integer)
		Me.size = size
		array = New Integer(size - 1){}
'INSTANT VB WARNING: An assignment within expression was extracted from the following statement:
'ORIGINAL LINE: front = rear = -1;
		rear = -1
		front = rear
	End Sub

	' enqueue method
	Public Sub Enqueue(ByVal item As Integer)
		If (front = 0 AndAlso rear = size - 1)(rear = (front - 1) Mod (size - 1)) Then
			Console.WriteLine("Queue is full")
			Return
		ElseIf front = -1 Then
'INSTANT VB WARNING: An assignment within expression was extracted from the following statement:
'ORIGINAL LINE: front = rear = 0;
			rear = 0
			front = rear
			array(rear) = item
		ElseIf rear = size - 1 AndAlso front <> 0 Then
			rear = 0
			array(rear) = item
		Else
			rear += 1
			array(rear) = item
		End If
	End Sub
	Public Function Dequeue() As Integer
		If front = -1 Then
			Console.WriteLine("Queue is empty")
			Return -1
		End If
		Dim item As Integer = array(front)
		array(front) = -1
		If front = rear Then
'INSTANT VB WARNING: An assignment within expression was extracted from the following statement:
'ORIGINAL LINE: front = rear = -1;
			rear = -1
			front = rear
		ElseIf front = size - 1 Then
			front = 0
		Else
			front += 1
		End If
		Return item
	End Function
End Class
Friend Class Program
	Shared Sub Main()
		' specified initial capacity 5
		Dim circularQueue As New CircularQueue(5)
		circularQueue.Enqueue(10)
		circularQueue.Enqueue(20)
		circularQueue.Enqueue(30)
		Console.WriteLine($"Circular Queue Dequeued: {circularQueue.Dequeue()}")
		Console.WriteLine($"Circular Queue Dequeued: {circularQueue.Dequeue()}")
	End Sub
End Class
VB   C#

C# 隊列(開發人員如何使用):圖 3 - 輸出:循環隊列

3. 在 C# 中介紹 IronPDF

當我們深入探討 C# Queue 的功能和應用時,了解如何將其無縫整合到現實世界的應用程式中是至關重要的。 這一強大的工具之一可增強 C# 功能的是 IronPDF。

IronPDF 是一個 C# 函式庫,簡化了 PDF 文件的建立、操作和呈現。 其直觀的 API 允許開發者從 HTML、ASPX 或甚至純文本生成 PDF。 使用 IronPDF,將 C# Queue 合併到 PDF 生成應用程式的過程變得更加流暢和高效。

3.1. 使用 C# Queue 與 IronPDF 代碼

讓我們仔細看看如何將 C# Queue 與 IronPDF 結合使用,以創建動態且有條理的 PDF 文件。 考慮一個場景,當一個 Web 應用程序需要根據用戶輸入和請求生成 PDF 報告時。

using IronPdf;
using System;
using System.Collections.Generic;
class PdfGenerator
{
    static void Main()
    {
        // Create a C# Queue to store user requests
        Queue<string> userRequests = new Queue<string>();

        // Simulate user requests being added to the queue
        userRequests.Enqueue("Generate PDF for User 1");
        userRequests.Enqueue("Generate PDF for User 2");
        userRequests.Enqueue("Generate PDF for User 3");

        // Process requests and generate PDFs
        while (userRequests.Count > 0)
        {
            string request = userRequests.Dequeue();
            GeneratePdf(request);
        }
    }
    static void GeneratePdf(string userRequest)
    {
        // Use IronPDF to generate PDF based on user request
        var Renderer = new HtmlToPdf();
        var PDF = Renderer.RenderHtmlAsPdf($"<h1>{userRequest}</h1>");

        // Save the generated PDF
        PDF.SaveAs($"{userRequest.Replace(" ", "_")}.pdf");
    }
}
using IronPdf;
using System;
using System.Collections.Generic;
class PdfGenerator
{
    static void Main()
    {
        // Create a C# Queue to store user requests
        Queue<string> userRequests = new Queue<string>();

        // Simulate user requests being added to the queue
        userRequests.Enqueue("Generate PDF for User 1");
        userRequests.Enqueue("Generate PDF for User 2");
        userRequests.Enqueue("Generate PDF for User 3");

        // Process requests and generate PDFs
        while (userRequests.Count > 0)
        {
            string request = userRequests.Dequeue();
            GeneratePdf(request);
        }
    }
    static void GeneratePdf(string userRequest)
    {
        // Use IronPDF to generate PDF based on user request
        var Renderer = new HtmlToPdf();
        var PDF = Renderer.RenderHtmlAsPdf($"<h1>{userRequest}</h1>");

        // Save the generated PDF
        PDF.SaveAs($"{userRequest.Replace(" ", "_")}.pdf");
    }
}
Imports IronPdf
Imports System
Imports System.Collections.Generic
Friend Class PdfGenerator
	Shared Sub Main()
		' Create a C# Queue to store user requests
		Dim userRequests As New Queue(Of String)()

		' Simulate user requests being added to the queue
		userRequests.Enqueue("Generate PDF for User 1")
		userRequests.Enqueue("Generate PDF for User 2")
		userRequests.Enqueue("Generate PDF for User 3")

		' Process requests and generate PDFs
		Do While userRequests.Count > 0
			Dim request As String = userRequests.Dequeue()
			GeneratePdf(request)
		Loop
	End Sub
	Private Shared Sub GeneratePdf(ByVal userRequest As String)
		' Use IronPDF to generate PDF based on user request
		Dim Renderer = New HtmlToPdf()
		Dim PDF = Renderer.RenderHtmlAsPdf($"<h1>{userRequest}</h1>")

		' Save the generated PDF
		PDF.SaveAs($"{userRequest.Replace(" ", "_")}.pdf")
	End Sub
End Class
VB   C#

在此範例中,一個 C# Queue(使用者請求)用於儲存用戶的 PDF 生成請求。 GeneratePdf 方法接受用戶請求,利用 IronPDF 將 HTML 內容轉換為 PDF 文件,並以相關名稱保存生成的 PDF 文件。

此整合方法也展示了 C# Queue 與 IronPDF 之間的協同作用,在有序處理使用者請求時,系統地創建 PDF 文件。

3.2. 輸出 #1

C# Queue(如何為開發人員工作):圖 4 - 輸出 1:使用 IronPDF 和 C# Queue 生成 PDF

3.3. 輸出 #2

C# 排隊(對開發人員的工作原理):圖 5 - 輸出 2:使用 IronPDF 和 C# Queue 生成 PDF

3.4. 輸出 #3

C# 隊列(開發人員如何使用):圖 6 - 輸出 3:使用 IronPDF 和 C# 隊列生成 PDF

4. 結論

總之,C# Queue 在順序管理和處理資料方面是一個寶貴的資產。 它遵循先進先出原則,使其適用於廣泛的應用範圍,從任務調度到網絡伺服器中的請求處理。 當與強大的庫結合時,如IronPDFC# Queue 更加強大,使開發者能夠更高效地創建有條理且動態的 PDF 文檔。

了解 C# Queue 的細微差別,並探索其與 IronPDF 等工具的整合,使開發人員能夠設計出強大且高效的數據管理和處理解決方案。 隨著技術持續演進,像 C# Queue 這樣的基本資料結構與創新函式庫之間的協同作用將在塑造軟體開發的格局中發揮關鍵作用。

如需許可證資訊,請造訪IronPDF 授權細節. 若要了解有關 HTML 到 PDF 的轉換,請造訪HTML 轉 PDF 轉換教學.

< 上一頁
Hangfire .NET Core(對開發人員的運作方式)
下一個 >
C# 案例陳述句(如何為開發人員運作)

準備開始了嗎? 版本: 2024.12 剛剛發布

免費 NuGet 下載 總下載次數: 11,622,374 查看許可證 >