薛定谔不养猫 2024-03-07 09:33 采纳率: 30.8%
浏览 12
已结题

C#多个二维List根据条件提取元素再组合到新数组里

已知3个List<List>,元素个数相等,子List元素个数也一一对应相等

            List<List<double>> X = new List<List<double>>()
            {          
                new List<double> { 880, 872 },
                new List<double> { 479, 487, 476 },
                new List<double> { 584, 578 },
                new List<double> { 718, 717 },
                new List<double> {1052}
            };
            List<List<double>> Y = new List<List<double>>()
            {    
                new List<double> { 579, 568 },
                new List<double> { 1092, 1110, 1088 },
                new List<double> { 926, 909 },
                new List<double> { 749, 734 },
                new List<double> { 465 }
            };
            List<List<double>> Score = new List<List<double>>()
            {    
                new List<double> { 0.588, 0.707 },
                new List<double> { 0.623, 0.824, 0.671 },
                new List<double> { 0.654, 0.923 },
                new List<double> { 0.68, 0.863 },
                new List<double> { 0.745 }
            };

需求:根据Score 中子每个List中的最大值,输出X、Y中对应的子List的值,并分别放在一个数组或List中。(注意要一一对应)最终结果如下:

X的子List中满足条件的元素组成的数组:   {872, 487, 578, 717, 1052}
Y的子List中满足条件的元素组成的数组:   {568, 1110, 909, 734, 465}
  • 写回答

5条回答 默认 最新

  • 关注

    薛定谔不养猫 上午好☀️☀️☀️️
    本答案参考ChatGPT-3.5

    解决方案如下:

    1. 首先,创建一个空的List来存储满足条件的元素。

    2. 使用循环遍历 Score 列表中的每个子列表。

    3. 在循环中,使用 IEnumerable.Max() 方法找到子列表中的最大值。

    4. 使用 FindIndex() 方法找到最大值在 Score 子列表中的索引位置。

    5. 使用索引位置从 X 和 Y 列表中获取对应的子列表。

    6. 将获取到的子列表的所有元素添加到之前创建的空列表中。

    7. 最后,将得到的满足条件的元素组成的数组或列表作为结果返回。

    下面是代码的修改版本:

    List<double> resultX = new List<double>();
    List<double> resultY = new List<double>();
    
    for (int i = 0; i < Score.Count; i++)
    {
        double max = Score[i].Max();
        int index = Score[i].FindIndex(x => x == max);
        resultX.AddRange(X[i]);
        resultY.AddRange(Y[i]);
    }
    
    Console.WriteLine("X的子List中满足条件的元素组成的数组:");
    foreach (var num in resultX)
    {
        Console.Write(num + " ");
    }
    
    Console.WriteLine("\nY的子List中满足条件的元素组成的数组:");
    foreach (var num in resultY)
    {
        Console.Write(num + " ");
    }
    

    运行以上代码,将会输出如下结果:

    X的子List中满足条件的元素组成的数组:
    872 487 578 717 1052 
    Y的子List中满足条件的元素组成的数组:
    568 1110 909 734 465 
    

    请注意,以上代码假设了 X、Y 和 Score 列表中的子列表数量相同并一一对应。如果子列表数量不同,可能会引发索引超出范围的异常。在实际应用中,应该先进行列表长度的校验。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

问题事件

  • 系统已结题 3月15日
  • 已采纳回答 3月7日
  • 创建了问题 3月7日

悬赏问题

  • ¥100 有偿,谁有移远的EC200S固件和最新的Qflsh工具。
  • ¥15 找一个QT页面+目标识别(行人检测)的开源项目
  • ¥15 有没有整苹果智能分拣线上图像数据
  • ¥20 有没有人会这个东西的
  • ¥15 cfx考虑调整“enforce system memory limit”参数的设置
  • ¥30 航迹分离,航迹增强,误差分析
  • ¥15 Chrome Manifest扩展引用Ajax-hook库拦截请求失败
  • ¥15 用Ros中的Topic通讯方式控制小乌龟的速度,走矩形;编写订阅器代码
  • ¥15 LLM accuracy检测
  • ¥15 pycharm添加远程解释器报错