薛定谔不养猫 2024-03-06 16:21 采纳率: 30.8%
浏览 3
已结题

C# 数组拆分再根据指定条件组装

C# 数组拆分再根据指定条件组装
比如:double[] X = {880, 479, 584, 487, 718, 872,1052, 476, 717, 578}; // 数组X
double[] Y = {579, 1092, 926, 1110, 749, 568, 465, 1088, 734, 909}; // 数组Y
double[] Score = {0.588, 0.623, 0.654, 0.824, 0.68, 0.707,0.745, 0.671, 0.863, 0.923}; // 数组Score
三个数组的元素值根据索引是 一 一 对应的,首先提取X、Y数组中元素差值同时满足在指定范围内(比如差值<=30)的元素并放在多个子数组中,同时数组Score中的元素也跟着放在多个子数组中,如下形式:
数组X的子数组: {880, 872} 数组Y的子数组:{579, 568} 数组Score 的子数组:{0.588, 0.707}
{479, 487, 476} {1092, 1110, 1088 } {0.623, 0.824, 0.671}
{584, 578} {926, 909} {0.654, 0.923}
{718, 717} {749, 734} {0.68, 0.863}
{1052} {465} {0.745}
完成后,再根据每个Score子数组中的最大元素值对应的索引输出X、Y子数组中的元素,将这些元素在放在一个数组中
最终输出:
数组X的子数组满足条件的数组: {872, 487, 578, 717, 1052}
数组Y的子数组满足条件的数组: {568, 1110, 909, 734, 465}

  • 写回答

5条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-03-06 16:23
    关注

    引自免费微信小程序:皆我百晓生

    当然,我将为您提供一个C#代码示例来解决这个问题。首先,我们需要创建一个新的类(例如DataPoint)来存储X、Y和Score的对应关系,然后根据指定条件对数组进行分组,并找到每个子数组中Score最大值对应的索引。以下是完成这个任务的完整C#代码:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    
    public class DataPoint
    {
        public double X { get; set; }
        public double Y { get; set; }
        public double Score { get; set; }
    
        public DataPoint(double x, double y, double score)
        {
            X = x;
            Y = y;
            Score = score;
        }
    }
    
    class Program
    {
        static void Main(string[] args)
        {
            // 原始数据
            List<DataPoint> dataPoints = new List<DataPoint>
            {
                new DataPoint(880, 579, 0.588),
                new DataPoint(479, 1092, 0.623),
                new DataPoint(584, 926, 0.654),
                new DataPoint(487, 1110, 0.824),
                new DataPoint(718, 749, 0.680),
                new DataPoint(872, 568, 0.707),
                new DataPoint(1052, 465, 0.745),
                new DataPoint(476, 1088, 0.671),
                new DataPoint(717, 734, 0.863),
                new DataPoint(578, 909, 0.923),
            };
    
            // 指定差值范围
            const double deltaThreshold = 30;
    
            // 根据X-Y差值是否满足条件进行分组
            var groups = dataPoints.Select((dp, index) => new
            {
                Index = index,
                Point = dp,
                GroupKey = Enumerable.Range(0, dataPoints.Count - 1)
                    .Where(i => Math.Abs(dp.X - dataPoints[i].X) <= deltaThreshold && Math.Abs(dp.Y - dataPoints[i].Y) <= deltaThreshold)
                    .Select(i => i)
            })
            .GroupBy(x => x.GroupKey);
    
            // 找到每个子数组中Score最大值对应的DataPoint
            var resultDataPoints = groups.Select(group =>
            {
                var maxScoreDataPoint = group.OrderByDescending(gp => gp.Point.Score).First();
                return maxScoreDataPoint.Point;
            }).ToList();
    
            // 输出满足条件的X和Y数组
            var resultXArray = resultDataPoints.Select(dp => dp.X).ToArray();
            var resultYArray = resultDataPoints.Select(dp => dp.Y).ToArray();
    
            Console.WriteLine("数组X的子数组满足条件的数组: " + string.Join(", ", resultXArray));
            Console.WriteLine("数组Y的子数组满足条件的数组: " + string.Join(", ", resultYArray));
        }
    }
    

    这段代码首先将原始数据转换为包含X、Y、Score属性的DataPoint对象列表,然后根据X和Y的差值是否满足指定条件进行分组,并在每个分组中找出具有最大Score值的数据点。最后,输出满足条件的X和Y数组。请注意,这里假设的是X和Y同时满足差值小于等于30的条件,如果只需要其中一个满足条件,请相应地修改比较逻辑部分。

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

报告相同问题?

问题事件

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

悬赏问题

  • ¥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添加远程解释器报错