You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在C#中按可变需求量对多组值进行分组

按需求分组的数组拆分实现方案

核心逻辑是先确定能组成多少组完整的需求集合,再根据组数生成对应的分组结果:

步骤拆解

  • 统计实际数量:先对输入的values数组按值分组,统计每个值的总出现次数。
  • 计算最大组数:对每个配置项,用「实际数量 ÷ 需求数量」取整数部分,所有配置项的这个结果里的最小值,就是能组成的完整需求组数(记为maxSets)。
  • 生成分组结果:对每个配置项,生成maxSets个包含对应需求数量的分组,最终汇总所有分组得到结果。

C# 代码实现

using System;
using System.Collections.Generic;
using System.Linq;

public class Program
{
    public class ConfigItem
    {
        public char Value { get; set; }
        public int AmountRequired { get; set; }
    }

    public static List<List<char>> GetGroupedResults(ConfigItem[] config, char[] values)
    {
        // 统计每个值的实际出现次数
        var valueCounts = values.GroupBy(v => v)
                                .ToDictionary(g => g.Key, g => g.Count());

        // 计算最大可组成的完整需求组数
        int maxSets = config.Min(item => 
            valueCounts.TryGetValue(item.Value, out int count) ? count / item.AmountRequired : 0);

        // 生成结果集合
        var results = new List<List<char>>();
        foreach (var item in config)
        {
            for (int i = 0; i < maxSets; i++)
            {
                results.Add(Enumerable.Repeat(item.Value, item.AmountRequired).ToList());
            }
        }

        return results;
    }

    public static void Main()
    {
        // 测试示例1:完全匹配需求
        var config = new[] {
            new ConfigItem { Value = 'A', AmountRequired = 1 },
            new ConfigItem { Value = 'B', AmountRequired = 2 },
            new ConfigItem { Value = 'C', AmountRequired = 3 },
            new ConfigItem { Value = 'D', AmountRequired = 4 }
        };

        var values1 = new[] { 'A', 'B', 'B', 'C', 'C', 'C', 'D', 'D', 'D', 'D' };
        var results1 = GetGroupedResults(config, values1);
        PrintResults(results1);

        // 测试示例2:每个值多一个
        var values2 = new[] { 'A', 'A', 'B', 'B', 'B', 'C', 'C', 'C', 'C', 'D', 'D', 'D', 'D', 'D' };
        var results2 = GetGroupedResults(config, values2);
        PrintResults(results2);
    }

    private static void PrintResults(List<List<char>> results)
    {
        Console.WriteLine("输出结果:");
        foreach (var group in results)
        {
            Console.WriteLine($"[{string.Join(", ", group.Select(c => $"'{c}'"))}]");
        }
        Console.WriteLine();
    }
}

代码说明

  • 统计数量时用GroupBy+ToDictionary快速获取每个值的总数,处理不存在的配置值时默认计数为0,避免报错。
  • 计算maxSets时取所有配置项的「可分组数」最小值,确保所有配置项都能满足组数要求,多余的单个值会被自动忽略。
  • 生成结果时,按配置项循环生成对应组数的分组,完全匹配需求格式。

内容的提问来源于stack exchange,提问作者marcuthh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 01:46:06