Jagged Array [] []查找

时间:2018-03-02 00:16:10

标签: c# arrays linq jagged-arrays

我有一个锯齿状阵列:

int[][] loadData

     a1
o1 | 3  1 5 4 3 3 1
o2 | 1  4 1 2 2 1 0
o3 | 4  4 5 4 4 3 1
o4 | 2  3 4 4 5 4 1
o5 | 3  3 5 2 5 5 1
o6 | 3  3 3 1 5 2 0
o7 | 2  5 3 5 1 2 1
o8 | 4  5 4 4 4 1 0 // this is my jagged array without o1 and a1 I use them for example 

我想查找列a1中编号为3的所有元素。我尝试混合代码但没有效果。

例如列a1中的3:

Dictionary<int, int?>[] matrix = new Dictionary<int, int?>[8];
matrix[0].Add(1, 3);
matrix[0].Add(5, 3);
matrix[0].Add(6, 3);

var x = Array.FindAll(loadData, a => Enumerable.Range(0, s)
                                   .Select(j => loadData[j][0]));`

如何解决?

2 个答案:

答案 0 :(得分:2)

答案取决于你的意思&#34;找到所有。&#34;

如果要查找和计算行数,可以

var count = array.Count( a => a[0] == 3 );

如果要输出行号,它会变得有点棘手,因为在应用Where部分之前必须通过行号,否则原始行号将丢失。

var indexes = array.Select
( 
    (a, i) => 
    new { RowNumber = i, Value = a[0]} 
)
.Where( n => n.Value == 3 )
.Select( r => r.RowNumber )

您也可以展平数组:

var flatList = array.SelectMany
(
    (array, row) => 
    array.Select
    (
        (element,column) => 
        new { Row = row, Column = column, Value = element } 
    )
);

...然后像平面表一样查询:

var indexes = flatList.Select
( 
    element => element.Column = 0 && element.Value == 3 
)
.Select( a => a.Row );

答案 1 :(得分:0)

我可能错了,但我认为您可能正在寻找使用linq在.Where语句中使用SelectMany子句。虽然我将它转换为string [] []数组,但我发布了一个类似的问题。 https://stackoverflow.com/a/47784942/7813290