Jagged Array [] []查找列中的所有选定元素

问题描述 投票:0回答:2

我有一个锯齿状的数组:

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]));`

怎么解决?

c# arrays linq jagged-arrays
2个回答
2
投票

答案取决于你所说的“全部找到”。

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

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 );

0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.