从第一列值匹配的 2d 对象 [] 中选择整行

  • 本文关键字:对象 2d 选择 一列 linq
  • 更新时间 :
  • 英文 :


我有一个包含以下内容的 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;
    }
}

相关内容

  • 没有找到相关文章

最新更新