C# 陣列排序(開發者的工作原理)
陣列在C#編程中扮演著至關重要的角色,提供了一種方便的方式來儲存和操作資料集合。 在使用陣列時,一個基本操作是排序,而在本文中,我們將探索多種在C#中建立已排序陣列的方法。 到最後,您將不僅理解陣列排序的基礎知識,還會發現如何利用C#提供的強大排序功能。
理解陣列的基礎
在我們深入排序之前,讓我們重溫一下C#中陣列的基礎知識。 陣列是相同資料型別元素的集合,儲存在連續的記憶體位置中。 它們在使用索引標記法存取元素時提供了高效。
最簡單的方法:Array.Sort()
C#為排序陣列簡化了指定的陣列方法,Sort()。 此方法是多功能的,可以用於各種資料型別的陣列元素。這裡有一個一維陣列的快速範例:
int[] numbers = { 5, 2, 8, 1, 7 };
Array.Sort(numbers);Dim numbers() As Integer = { 5, 2, 8, 1, 7 }
Array.Sort(numbers)Dim numbers() As Integer = { 5, 2, 8, 1, 7 }
Array.Sort(numbers)上述程式碼將陣列元素按升序排列,使其成為{ 1, 2, 5, 7, 8 }。
使用IComparer進行自定義排序
雖然Array.Sort()方法對於簡單情境非常方便,但您可能會遇到需要自定義排序順序的情況。 這就是IComparer接口發揮作用的地方。 通過實現此接口,您可以定義用於排序陣列的比較邏輯。
using System.Collections;
class CustomComparer : IComparer
{
public int Compare(object x, object y)
{
int a = (int)x;
int b = (int)y;
// Compare a and b to order them descending
return b.CompareTo(a);
}
}
int[] numbers = { 5, 2, 8, 1, 7 };
Array.Sort(numbers, new CustomComparer());using System.Collections;
class CustomComparer : IComparer
{
public int Compare(object x, object y)
{
int a = (int)x;
int b = (int)y;
// Compare a and b to order them descending
return b.CompareTo(a);
}
}
int[] numbers = { 5, 2, 8, 1, 7 };
Array.Sort(numbers, new CustomComparer());Imports System.Collections
Friend Class CustomComparer
Implements IComparer
Public Function Compare(ByVal x As Object, ByVal y As Object) As Integer Implements IComparer.Compare
Dim a As Integer = DirectCast(x, Integer)
Dim b As Integer = DirectCast(y, Integer)
' Compare a and b to order them descending
Return b.CompareTo(a)
End Function
End Class
Private numbers() As Integer = { 5, 2, 8, 1, 7 }
Array.Sort(numbers, New CustomComparer())Imports System.Collections
Friend Class CustomComparer
Implements IComparer
Public Function Compare(ByVal x As Object, ByVal y As Object) As Integer Implements IComparer.Compare
Dim a As Integer = DirectCast(x, Integer)
Dim b As Integer = DirectCast(y, Integer)
' Compare a and b to order them descending
Return b.CompareTo(a)
End Function
End Class
Private numbers() As Integer = { 5, 2, 8, 1, 7 }
Array.Sort(numbers, New CustomComparer())物件排序:IComparable和IComparer
對自訂物件的陣列進行排序需要實現IComparable接口,或使用IComparer對物件進行排序。 這使得排序算法能夠理解您的物件的比較規則。 以下程式碼展示了基於年齡排序 Person物件陣列的邏輯:
using System;
class Person : IComparable<Person>
{
public string Name { get; set; }
public int Age { get; set; }
public int CompareTo(Person other)
{
// Compare Persons by age
return this.Age.CompareTo(other.Age);
}
}
// Array of people
Person[] people =
{
new Person { Name = "Alice", Age = 30 },
new Person { Name = "Bob", Age = 25 }
};
// Sort by age
Array.Sort(people);using System;
class Person : IComparable<Person>
{
public string Name { get; set; }
public int Age { get; set; }
public int CompareTo(Person other)
{
// Compare Persons by age
return this.Age.CompareTo(other.Age);
}
}
// Array of people
Person[] people =
{
new Person { Name = "Alice", Age = 30 },
new Person { Name = "Bob", Age = 25 }
};
// Sort by age
Array.Sort(people);Imports System
Friend Class Person
Implements IComparable(Of Person)
Public Property Name() As String
Public Property Age() As Integer
Public Function CompareTo(ByVal other As Person) As Integer Implements IComparable(Of Person).CompareTo
' Compare Persons by age
Return Me.Age.CompareTo(other.Age)
End Function
End Class
' Array of people
Private people() As Person = {
New Person With {
.Name = "Alice",
.Age = 30
},
New Person With {
.Name = "Bob",
.Age = 25
}
}
' Sort by age
Array.Sort(people)Imports System
Friend Class Person
Implements IComparable(Of Person)
Public Property Name() As String
Public Property Age() As Integer
Public Function CompareTo(ByVal other As Person) As Integer Implements IComparable(Of Person).CompareTo
' Compare Persons by age
Return Me.Age.CompareTo(other.Age)
End Function
End Class
' Array of people
Private people() As Person = {
New Person With {
.Name = "Alice",
.Age = 30
},
New Person With {
.Name = "Bob",
.Age = 25
}
}
' Sort by age
Array.Sort(people)Array.Reverse():顛倒順序
排序陣列後,您可能需要顛倒順序。 C#提供了Array.Reverse()方法正是為了這一目的。
int[] numbers = { 1, 2, 3, 4, 5 };
Array.Reverse(numbers);int[] numbers = { 1, 2, 3, 4, 5 };
Array.Reverse(numbers);Dim numbers() As Integer = { 1, 2, 3, 4, 5 }
Array.Reverse(numbers)Dim numbers() As Integer = { 1, 2, 3, 4, 5 }
Array.Reverse(numbers)現在,numbers陣列將會是{ 5, 4, 3, 2, 1 }。
善用LINQ
對於喜歡更具聲明風格來排序陣列的人,可以使用LINQ(語言整合查詢)來排序陣列。 OrderBy方法可以用來升序排序,OrderByDescending方法可以用來降序排序。 這些方法提供了一種簡明的方法來達到排序。 以下範例利用了LINQ查詢語法:
using System.Linq;
int[] numbers = { 5, 2, 8, 1, 7 };
var sortedNumbers = numbers.OrderBy(x => x).ToArray();using System.Linq;
int[] numbers = { 5, 2, 8, 1, 7 };
var sortedNumbers = numbers.OrderBy(x => x).ToArray();Imports System.Linq
Private numbers() As Integer = { 5, 2, 8, 1, 7 }
Private sortedNumbers = numbers.OrderBy(Function(x) x).ToArray()Imports System.Linq
Private numbers() As Integer = { 5, 2, 8, 1, 7 }
Private sortedNumbers = numbers.OrderBy(Function(x) x).ToArray()介紹IronPDF

了解更多關於IronPDF的資訊是一個強大的C#程式庫,它簡化了直接從HTML建立、修改和操作PDF文件的過程。 無論您是生成報告、發票,還是其他任何動態內容,IronPDF提供了一個無縫的解決方案,允許您利用C#的力量完成與PDF相關的任務。
IronPDF將網頁和HTML轉換為PDF,並保留原始格式。 它無縫整合到.NET專案中,使開發者能夠自動化PDF生成並改善工作流程。
using IronPdf;
class Program
{
static void Main(string[] args)
{
var renderer = new ChromePdfRenderer();
// 1. Convert HTML String to PDF
var htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>";
var pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent);
pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf");
// 2. Convert HTML File to PDF
var htmlFilePath = "path_to_your_html_file.html"; // Specify the path to your HTML file
var pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath);
pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf");
// 3. Convert URL to PDF
var url = "http://ironpdf.com"; // Specify the URL
var pdfFromUrl = renderer.RenderUrlAsPdf(url);
pdfFromUrl.SaveAs("URLToPDF.pdf");
}
}using IronPdf;
class Program
{
static void Main(string[] args)
{
var renderer = new ChromePdfRenderer();
// 1. Convert HTML String to PDF
var htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>";
var pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent);
pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf");
// 2. Convert HTML File to PDF
var htmlFilePath = "path_to_your_html_file.html"; // Specify the path to your HTML file
var pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath);
pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf");
// 3. Convert URL to PDF
var url = "http://ironpdf.com"; // Specify the URL
var pdfFromUrl = renderer.RenderUrlAsPdf(url);
pdfFromUrl.SaveAs("URLToPDF.pdf");
}
}Imports IronPdf
Friend Class Program
Shared Sub Main(ByVal args() As String)
Dim renderer = New ChromePdfRenderer()
' 1. Convert HTML String to PDF
Dim htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>"
Dim pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent)
pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf")
' 2. Convert HTML File to PDF
Dim htmlFilePath = "path_to_your_html_file.html" ' Specify the path to your HTML file
Dim pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath)
pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf")
' 3. Convert URL to PDF
Dim url = "http://ironpdf.com" ' Specify the URL
Dim pdfFromUrl = renderer.RenderUrlAsPdf(url)
pdfFromUrl.SaveAs("URLToPDF.pdf")
End Sub
End ClassImports IronPdf
Friend Class Program
Shared Sub Main(ByVal args() As String)
Dim renderer = New ChromePdfRenderer()
' 1. Convert HTML String to PDF
Dim htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a PDF from an HTML string.</p>"
Dim pdfFromHtmlString = renderer.RenderHtmlAsPdf(htmlContent)
pdfFromHtmlString.SaveAs("HTMLStringToPDF.pdf")
' 2. Convert HTML File to PDF
Dim htmlFilePath = "path_to_your_html_file.html" ' Specify the path to your HTML file
Dim pdfFromHtmlFile = renderer.RenderHtmlFileAsPdf(htmlFilePath)
pdfFromHtmlFile.SaveAs("HTMLFileToPDF.pdf")
' 3. Convert URL to PDF
Dim url = "http://ironpdf.com" ' Specify the URL
Dim pdfFromUrl = renderer.RenderUrlAsPdf(url)
pdfFromUrl.SaveAs("URLToPDF.pdf")
End Sub
End Class安裝IronPDF:快速開始
要在您的C#專案中開始利用IronPDF,您可以輕鬆安裝IronPDF NuGet套件。 在您的套件管理器控制台中使用以下命令:
或者,您可以在NuGet套件管理器中搜尋"IronPDF"並從那裡安裝。

使用IronPDF生成PDF
使用IronPDF建立PDF是直觀的。 讓我們考慮一個簡單的例子,我們從使用IronPDF的HTML字串建立PDF:
var htmlContent = "<html><body><h1>Hello, IronPDF!</h1></body></html>";
// Create a new PDF document
var pdfDocument = new IronPdf.ChromePdfRenderer();
pdfDocument.RenderHtmlAsPdf(htmlContent).SaveAs("GeneratedDocument.pdf");var htmlContent = "<html><body><h1>Hello, IronPDF!</h1></body></html>";
// Create a new PDF document
var pdfDocument = new IronPdf.ChromePdfRenderer();
pdfDocument.RenderHtmlAsPdf(htmlContent).SaveAs("GeneratedDocument.pdf");Dim htmlContent = "<html><body><h1>Hello, IronPDF!</h1></body></html>"
' Create a new PDF document
Dim pdfDocument = New IronPdf.ChromePdfRenderer()
pdfDocument.RenderHtmlAsPdf(htmlContent).SaveAs("GeneratedDocument.pdf")Dim htmlContent = "<html><body><h1>Hello, IronPDF!</h1></body></html>"
' Create a new PDF document
Dim pdfDocument = New IronPdf.ChromePdfRenderer()
pdfDocument.RenderHtmlAsPdf(htmlContent).SaveAs("GeneratedDocument.pdf")在這個範例中,我們使用IronPDF將HTML內容渲染為一個PDF文件。 生成的PDF,"GeneratedDocument.pdf",被保存到指定位置。 若要獲取有關如何生成PDF的更詳細資訊,請存取IronPDF文件頁面。
使用IronPDF的陣列排序
現在,問題出現了:我們之前探討的陣列排序技術能否無縫整合到IronPDF中? 答案是肯定的。
考慮一個場景,您有一個資料陣列,您希望在PDF中以表格式呈現。 您可以利用陣列排序在生成PDF之前組織資料,以確保輸出更具有結構且更便於使用。
using System.Linq;
// Sample array of data
string[] names = { "Alice", "Charlie", "Bob", "David" };
// Sorting the array alphabetically
Array.Sort(names);
// Generating PDF content with sorted data
var sortedPdfContent = $@"
<html>
<body>
<h1>Sorted Names</h1>
<ul>
{string.Join("", names.Select(name => $"<li>{name}</li>"))}
</ul>
</body>
</html>
";
// Create a new PDF document with sorted data
var sortedPdfDocument = new IronPdf.ChromePdfRenderer();
sortedPdfDocument.RenderHtmlAsPdf(sortedPdfContent).SaveAs("SortedNames.pdf");using System.Linq;
// Sample array of data
string[] names = { "Alice", "Charlie", "Bob", "David" };
// Sorting the array alphabetically
Array.Sort(names);
// Generating PDF content with sorted data
var sortedPdfContent = $@"
<html>
<body>
<h1>Sorted Names</h1>
<ul>
{string.Join("", names.Select(name => $"<li>{name}</li>"))}
</ul>
</body>
</html>
";
// Create a new PDF document with sorted data
var sortedPdfDocument = new IronPdf.ChromePdfRenderer();
sortedPdfDocument.RenderHtmlAsPdf(sortedPdfContent).SaveAs("SortedNames.pdf");Imports System.Linq
' Sample array of data
Private names() As String = { "Alice", "Charlie", "Bob", "David" }
' Sorting the array alphabetically
Array.Sort(names)
' Generating PDF content with sorted data
, String.Join(TangibleTstring.Format(mpVerbatimDoubleQuote, names.Select(Function(name) $TangibleTempVerbatimCloseTag"<li>{name}</li>")), TangibleStringInterpolationMarker)var sortedPdfContent = $"TangibleTempVerbatimOpenTagTangibleTempVerbatimStringLiteralLineJoin <html>TangibleTempVerbatimStringLiteralLineJoin <body>TangibleTempVerbatimStringLiteralLineJoin <h1>Sorted Names</h1>TangibleTempVerbatimStringLiteralLineJoin <ul>TangibleTempVerbatimStringLiteralLineJoin {0}ignoreignoreignoreignoreignore</ul></body></html>"
' Create a new PDF document with sorted data
Dim sortedPdfDocument = New IronPdf.ChromePdfRenderer()
sortedPdfDocument.RenderHtmlAsPdf(sortedPdfContent).SaveAs("SortedNames.pdf")Imports System.Linq
' Sample array of data
Private names() As String = { "Alice", "Charlie", "Bob", "David" }
' Sorting the array alphabetically
Array.Sort(names)
' Generating PDF content with sorted data
, String.Join(TangibleTstring.Format(mpVerbatimDoubleQuote, names.Select(Function(name) $TangibleTempVerbatimCloseTag"<li>{name}</li>")), TangibleStringInterpolationMarker)var sortedPdfContent = $"TangibleTempVerbatimOpenTagTangibleTempVerbatimStringLiteralLineJoin <html>TangibleTempVerbatimStringLiteralLineJoin <body>TangibleTempVerbatimStringLiteralLineJoin <h1>Sorted Names</h1>TangibleTempVerbatimStringLiteralLineJoin <ul>TangibleTempVerbatimStringLiteralLineJoin {0}ignoreignoreignoreignoreignore</ul></body></html>"
' Create a new PDF document with sorted data
Dim sortedPdfDocument = New IronPdf.ChromePdfRenderer()
sortedPdfDocument.RenderHtmlAsPdf(sortedPdfContent).SaveAs("SortedNames.pdf")在這個範例中,名稱陣列按字母順序排序,然後再將其併入HTML內容中。 生成的PDF,"SortedNames.pdf",將以排序順序顯示名稱。

結論
總之,掌握C#中的陣列排序對於高效的資料操作至關重要。 無論您正在處理簡單的數字陣列還是複雜的物件,C#提供了多種工具來滿足您的排序需求。 通過理解Array.Sort()的基礎,使用IComparer進行的自定義排序,以及使用LINQ來達成更具表現力的方法,您可以在您的C#專案中高效且優雅地處理陣列。
將IronPDF整合到您的C#專案中,不僅提供了一個強大的PDF生成工具,還允許將陣列排序無縫整合到您的文件建立工作流程中。 無論您是在組織表格資料還是建立動態報告,陣列排序和IronPDF之間的協同作用將使您能夠在C#中提升您的文件生成能力。 所以,擁抱C#陣列中的排序威力,提升您的編程技能!
Jacob Mellor是Iron Software的首席技術官,一位在C# PDF技術上開創先河的遠見工程師。作為Iron Software核心程式碼庫的原開發者,他從創立以來就一直在塑造公司的產品架構,與首席執行官Cameron Rimington一起將公司轉變為服務於NASA、特斯拉和全球政府公司的50多名人員的公司。