我有一个包含以下内容的 2D 对象数组:
Filename | "filename.txt" | 1
Path | "C:temp" | 2
Date | 16/06/2015 | 3
我想从这个数组中提取与给定标题匹配的行,其中标题是第一列的值。例如,给定"路径",我希望得到:
Path | "C:temp" | 2
我目前正在循环查找正确的行号,然后循环遍历该行以提取它。我很确定使用 linq 可以使它看起来更好一点,但我很少使用它。
任何帮助将不胜感激。
如果您使用的是交错数组,则相当简单:
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");
但是,如果您使用的是矩形数组,它会变得更加丑陋。 矩形数组没有"行"或"列"的概念,只有单元格,所以你需要构建一个新数组:
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;
}
}