[英]How to extract entire columns from multidimensional (2d) array
我正在嘗試盡可能高效地自動化 Excel 合並和轉換(ETL 前)過程。 目前,我使用 Interop Excel 將電子表格作為多維數組讀取:
Excel.Range range = ws.UsedRange;
object[,] worksheetData = (object[,]) range.Value2;
我知道不推薦使用 Interop,但我一直遇到其他庫的問題,此外還需要使用 Interop 將工作簿轉換為這些庫無論如何都可以使用的文件類型(大多數需要 .xlsx 和我正在使用的工作簿)每種可能的文件類型)。
所以每個工作簿(我將合並多達 10 個工作簿)將作為它自己的 2Darray 讀入。 現在我有一個包含所有數據的 2D 數組,我只需要識別我需要的目標列並按指定順序提取這些列(以便它們可以與其他數組組合/合並)。
有沒有辦法通過按指定順序從每個多維數組中僅選擇某些列來創建每個數組的副本,以便以后可以合並副本數組?
我不知道如何去做,所以任何和所有提示都值得贊賞!
嘗試這個:
var source = new int[,]
{
{ 1, 2, 3 },
{ 1, 2, 3 },
{ 1, 2, 3 },
{ 1, 2, 3 },
};
int[] third = Enumerable.Range(0, source.GetLength(0)).Select(x => source[x, 2]).ToArray();
它給:
3 3 3 3
除了 Enigmativity 的 Linq 答案
您還可以使用迭代器擴展方法
public static class Extensions
{
public static IEnumerable<T> GetColumn<T>(this T[,] array, int col)
{
for (var i = 0; i < array.GetLength(0); i++)
yield return array[i, col];
}
}
用法
var cols = someArray.GetColumn(2);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.