C# Array Sort(开发者如何使用)
数组在 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)现在,数字数组将变为{ 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# 库,简化了 PDF 文档从 HTML 的创建、修改和操作。 无论您是生成报告、发票还是其他动态内容,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
using 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 一起将公司转变为一家拥有 50 多名员工的公司,为 NASA、特斯拉和全球政府机构提供服务。