薛定谔不养猫 2024-06-03 21:51 采纳率: 30.8%
浏览 9

C#数组根据条件拆分再组合

C#有两个数组,元素 一 一 对应,

float[] X = {880, 479, 584, 487, 718, 872, 1052, 476, 717, 578, 485, 480};
float[] Y = {579, 1092, 926, 1110, 749, 568, 465, 1088, 734, 909, 1108, 1266};

需求:筛选出同时满足数组X中任意两个元素之间差值≤30、数组Y中任意两个元素之间差值≤25,通过使用两个List<List>将满足条件的元素分别放在多个子数组中,如下所示:

数组X中满足条件的子数组:         {476}     {479, 485, 487}     {480}    {578, 584} {717, 718} {872, 880} {1052}
数组Y中满足条件的子数组:        {1088} {1092, 1108, 1110} {1266}  {909, 926} {734, 749} {568, 579}  {465}
  • 写回答

2条回答 默认 最新

  • 阿里嘎多学长 2024-06-03 21:51
    关注

    以下内容由CHATGPT及阿里嘎多学长共同生成、有用望采纳:


    要实现这个需求,我们可以采用以下步骤来设计算法:

    1. 初始化:创建两个List<List<float>>来存储数组X和Y的子数组。
    2. 遍历数组:分别遍历数组X和Y,使用一个辅助变量来记录当前子数组的起始索引。
    3. 检查条件:对于数组中的每个元素,检查与前一个元素的差值是否满足条件(X数组≤30,Y数组≤25)。
    4. 拆分和组合:如果当前元素与前一个元素的差值满足条件,则继续添加到当前子数组中;如果不满足,则结束当前子数组,开始一个新的子数组。
    5. 存储结果:将每个子数组添加到对应的List<List<float>>中。
    6. 输出结果:最后,输出两个List<List<float>>

    下面是C#代码实现:

    using System;
    using System.Collections.Generic;
    
    class Program
    {
        static void Main()
        {
            float[] X = {880, 479, 584, 487, 718, 872, 1052, 476, 717, 578, 485, 480};
            float[] Y = {579, 1092, 926, 1110, 749, 568, 465, 1088, 734, 909, 1108, 1266};
            
            List<List<float>> groupedX = GroupByCondition(X, 30);
            List<List<float>> groupedY = GroupByCondition(Y, 25);
    
            // 打印结果
            Console.WriteLine("数组X中满足条件的子数组:");
            PrintList(groupedX);
            
            Console.WriteLine("数组Y中满足条件的子数组:");
            PrintList(groupedY);
        }
    
        static List<List<float>> GroupByCondition(float[] array, int maxDifference)
        {
            List<List<float>> result = new List<List<float>>();
            List<float> currentGroup = new List<float>();
    
            int startIndex = 0;
            for (int i = 1; i < array.Length; i++)
            {
                if (Math.Abs(array[i] - array[i - 1]) > maxDifference)
                {
                    // 如果当前元素与前一个元素的差值大于maxDifference,则结束当前子数组
                    result.Add(currentGroup);
                    currentGroup = new List<float>();
                    startIndex = i;
                }
                currentGroup.Add(array[i]);
            }
    
            // 添加最后一个子数组
            result.Add(currentGroup);
    
            return result;
        }
    
        static void PrintList(List<List<float>> list)
        {
            foreach (var group in list)
            {
                Console.Write("{");
                string result = string.Join(", ", group);
                Console.Write(result);
                Console.WriteLine("}");
            }
        }
    }
    

    这段代码首先定义了一个GroupByCondition方法,它接受一个数组和一个最大差值作为参数,然后根据条件将数组拆分成多个子数组。PrintList方法用于打印List<List<float>>中的内容。

    关于参考资料,这个算法主要涉及到数组操作和列表处理,这是C#编程语言的基础部分。你可以通过阅读C#官方文档或者查找相关的在线教程来获取更多信息。由于这个算法相对简单,可能没有专门的在线资源来描述这个特定的问题,但是理解数组和列表的基本操作将有助于你理解和实现这个算法。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 6月3日

悬赏问题

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