【问题标题】:Jagged Array[][] find all selected elements in columnJagged Array[][] 查找列中的所有选定元素
【发布时间】:2023-03-23 05:10:02
【问题描述】:

我有一个锯齿状数组:

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


    【解决方案1】:

    答案取决于您所说的“查找全部”是什么意思。

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2010-12-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-09-20
        • 2021-03-24
        • 2015-05-07
        • 2021-04-17
        相关资源
        最近更新 更多