C#中数组中Skip 和 Take 怎么用

一分钟识点扫盲

Skip Take 是C#里面集合的扩展方法 

Skip是跳过第几个之后开始,取得的值包括当前下标值的内容

Take 是获取到第几个下标为止,取得的值不包括当前下标值的内容

1

2

3

4

5

6

var list = new List<int>();

//比如  list里面是 1,2,3,4,5,6,7,8,9,10

var result = list.Skip(2);  //返回值就是 3,4,5,6,7,8,9,10;

var result = list.Take(2);  //返回值就是 1,2

//搭配使用,一般用来分页

var result = list.Skip(2).Take(2); //返回值 3,4

C# ,可以使用 OpenXML SDK 等库来创建和操作 Excel 文件。如果要处理大量数据并且需要加快导出速度,可以考虑使用多线程技术来并行处理数据并导出 Excel 文件。 以下是一个简单的示例,演示如何使用多线程导出 Excel 文件: ```csharp using System.Threading.Tasks; using DocumentFormat.OpenXml; using DocumentFormat.OpenXml.Packaging; using DocumentFormat.OpenXml.Spreadsheet; public void ExportDataToExcel(string fileName, int[][] data) { // 创建 Excel 文件 using (var doc = SpreadsheetDocument.Create(fileName, SpreadsheetDocumentType.Workbook)) { // 添加工作表 var workbookPart = doc.AddWorkbookPart(); workbookPart.Workbook = new Workbook(); var worksheetPart = workbookPart.AddNewPart<WorksheetPart>(); worksheetPart.Worksheet = new Worksheet(new SheetData()); var sheets = workbookPart.Workbook.AppendChild(new Sheets()); sheets.Append(new Sheet() { Id = workbookPart.GetIdOfPart(worksheetPart), SheetId = 1, Name = "Sheet1" }); // 将数据拆分成多个子数组 int threadCount = Environment.ProcessorCount; int batchSize = data.Length / threadCount; var tasks = new List<Task>(); for (int i = 0; i < threadCount; i++) { int startIndex = i * batchSize; int endIndex = (i == threadCount - 1) ? data.Length : (i + 1) * batchSize; int[][] subData = data.Skip(startIndex).Take(endIndex - startIndex).ToArray(); // 创建任务并执行 tasks.Add(Task.Factory.StartNew(() => { // 在当前线程处理子数组并将结果写入 Excel 文件 var sheetData = worksheetPart.Worksheet.GetFirstChild<SheetData>(); foreach (var row in subData) { var sheetRow = new Row(); foreach (var cellValue in row) { var cell = new Cell() { DataType = CellValues.Number, CellValue = new CellValue(cellValue.ToString()) }; sheetRow.AppendChild(cell); } sheetData.AppendChild(sheetRow); } })); } // 等待所有任务完成 Task.WaitAll(tasks.ToArray()); // 保存并关闭 Excel 文件 workbookPart.Workbook.Save(); } } ``` 在上面的示例,我们首先创建了一个 Excel 文件,并添加了一个名为 "Sheet1" 的工作表。然后,我们将数据拆分成多个子数组,每个子数组在一个独立的线程处理。在处理过程,我们将结果写入 Excel 文件的工作表。最后,我们等待所有任务完成,保存并关闭 Excel 文件。 需要注意的是,由于多个线程同时写入同一个 Excel 文件会导致冲突和性能问题,因此我们在上面的示例为每个线程创建了一个独立的工作表。如果需要将结果合并到同一个工作表,需要在多个线程之间进行同步处理,或者使用其他技术来避免冲突。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值