薛定谔不养猫 2024-03-06 16:30 采纳率: 30.8%
浏览 17

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}
{479, 487, 476}
{584, 578}
{718, 717}
{1052}
数组Y的子数组:{579, 568}
{1092, 1110, 1088 }
{926, 909}
{749, 734}
{465}
数组Score 的子数组:{0.588, 0.707}
{0.623, 0.824, 0.671}
{0.654, 0.923}
{0.68, 0.863}
{0.745}
完成后,再根据每个Score子数组中的最大元素值对应的索引输出X、Y子数组中的元素,将这些元素在放在一个数组中
最终输出:
数组X的子数组满足条件的数组: {872, 487, 578, 717, 1052}
数组Y的子数组满足条件的数组: {568, 1110, 909, 734, 465}

  • 写回答

3条回答 默认 最新

  • GISer Liu 2024-03-06 16:31
    关注

    该回答引用自GPT-3.5,由博主GISer Liu编写:

    根据您的问题描述,您需要编写一个C#程序,该程序能够将给定的三个数组拆分成满足指定条件的子数组,并根据子数组中的最大元素值的索引输出对应的元素。下面是解决这个问题的思路和解决方案:

    解决思路:

    1. 首先,我们需要编写一个函数,该函数能够将给定的两个数组按照指定条件拆分成子数组。在这个问题中,我们需要根据X和Y数组中元素的差值是否小于等于30来拆分子数组。
    2. 接着,我们需要编写另一个函数,该函数接收拆分后的子数组以及对应的Score数组,然后根据每个Score子数组中的最大元素值的索引输出对应的X和Y子数组中的元素。
    3. 最后,我们将这些元素放入一个新的数组中,并输出该数组作为最终结果。

      解决方案:

      csharpCopy code
      using System;
      using System.Collections.Generic;
      class Program
      {
      static void Main(string[] args)
      {
      double[] X = { 880, 479, 584, 487, 718, 872, 1052, 476, 717, 578 };
      double[] Y = { 579, 1092, 926, 1110, 749, 568, 465, 1088, 734, 909 };
      double[] Score = { 0.588, 0.623, 0.654, 0.824, 0.68, 0.707, 0.745, 0.671, 0.863, 0.923 };
      List<double[]> resultX = SplitArray(X, Y, Score);
      List<double[]> resultY = SplitArray(Y, X, Score);
      List<double> finalX = new List<double>();
      List<double> finalY = new List<double>();
      foreach (var subArray in resultX)
      {
      int maxIndex = GetMaxIndex(subArray, Score);
      finalX.Add(subArray[maxIndex]);
      finalY.Add(resultY[resultX.IndexOf(subArray)][maxIndex]);
      }
      Console.WriteLine("数组X的子数组满足条件的数组:");
      Console.WriteLine(string.Join(", ", finalX));
      Console.WriteLine("数组Y的子数组满足条件的数组:");
      Console.WriteLine(string.Join(", ", finalY));
      }
      static List<double[]> SplitArray(double[] array1, double[] array2, double[] scores)
      {
      List<double[]> result = new List<double[]>();
      List<double> temp = new List<double>();
      double threshold = 30;
      for (int i = 0; i < array1.Length; i++)
      {
      double diff = Math.Abs(array1[i] - array2[i]);
      if (diff <= threshold)
      {
      temp.Add(array1[i]);
      }
      else
      {
      if (temp.Count > 0)
      {
      result.Add(temp.ToArray());
      temp.Clear();
      }
      }
      }
      if (temp.Count > 0)
      {
      result.Add(temp.ToArray());
      }
      return result;
      }
      static int GetMaxIndex(double[] array, double[] scores)
      {
      double max = double.MinValue;
      int maxIndex = -1;
      for (int i = 0; i < array.Length; i++)
      {
      if (scores[i] > max)
      {
      max = scores[i];
      maxIndex = i;
      }
      }
      return maxIndex;
      }
      }
      
      这个解决方案首先拆分了X和Y数组,然后根据每个子数组中Score数组的最大元素值的索引,输出了满足条件的X和Y子数组中的元素。最终结果保存在finalX和finalY中,并输出到控制台上。

    如果该回答解决了您的问题,请采纳!如果没有,请参考以下方案进行修订

    用户答题指南

    评论

报告相同问题?

问题事件

  • 创建了问题 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添加远程解释器报错