C#数字的所有可能组合并标识每个

我有一个有效的代码,可以找到等于18的数字的所有可能组合。我想在程序中实现它, 问题是我需要识别这些数字中的每个数字,因为其中一些是重复的。然后程序将分别与它们一起运行。

具体来说,我有一组权重和位置,每个位置都有一个权重。

我需要找到不超过一定重量的这些位置的组合,然后一个个地找到它们。

问题是,如果在两个位置的重量与我确定的重量相同,则首先要到达一个位置,然后再到达另一个位置。

非常感谢!

        int[] set = { 1, 2, 3, 1, 5, 6, 2}; //weights

        foreach (string s in GetCombinations(set, 18, "")) //18 max weight
        {
            textBox1.Text += s + Environment.NewLine;
        }



    public static IEnumerable<string> GetCombinations(int[] set, int sum, string values)
        {            

        for (int i = 0; i < set.Length; i++)
            {
                int left = sum - set[i];
                string vals = set[i] + "," + values;
                if (left == 0)
                {
                    yield return vals;
                }
                else
                {
                    int[] possible = set.Take(i).Where(n => n <= sum).ToArray();
                    if (possible.Length > 0)
                    {
                        foreach (string s in GetCombinations(possible, left, vals))
                        {
                            yield return s;
                        }
                    }
                }
            }