我有一个包含类似内容的2D对象数组:
Filename | "filename.txt" | 1
Path | "C:\temp\" | 2
Date | 16/06/2015 | 3
我想从这个数组中提取与给定标题匹配的行,其中标题是第一列的值。例如,给定'Path',我想给出:
Path | "C:\temp\" | 2
我正在循环查找正确的行号,然后循环遍历该行以提取它。我很确定使用linq可以让它看起来更漂亮,但我对它的使用很少。
非常感谢任何帮助。
答案 0 :(得分:0)
如果你使用的是锯齿状数组,那就相当简单了:
object[][] jagged = { new object[] {"Filename", "filename.txt", 1},
new object[] {"Path", @"C:\Temp", 2},
new object[] {"Date", new DateTime(2015,6,16), 3}};
var q = from j in jagged
where (j[0] as string) == "Path"
select j;
var row = q.FirstOrDefault();
// row is an object[3] array
事实上,这可以简化为:
var row = jagged.FirstOrDefault(j =>(j[0] as string) == "Path");
但是,如果你使用的是rectangluar数组,它会变得更加丑陋。矩形数组没有“行”或“列”的概念,只有单元格,因此您需要构建一个新数组:
object[,] rect = { { "Filename", "filename.txt", 1},
{"Path", @"C:\Temp", 2},
{"Date", new DateTime(2015,6,16), 3}};
var result = new object[rect.GetLength(1)];
for(int i = rect.GetLowerBound(0); i <= rect.GetUpperBound(0); ++i)
{
if (rect[i, rect.GetLowerBound(1)] as string == "Path")
{
for (int j = 0; j < rect.GetLength(1); ++j)
result[j] = rect[i, rect.GetLowerBound(1) + j];
break;
}
}