Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从具有唯一组合的方法中获取内容(无重复)_C#_Arrays_Unique Index - Fatal编程技术网

C# 从具有唯一组合的方法中获取内容(无重复)

C# 从具有唯一组合的方法中获取内容(无重复),c#,arrays,unique-index,C#,Arrays,Unique Index,我有5个文本文件,其中包含一些元素 A(有1000个元素) B(有7个要素) C(有3个要素) D(有2个元素) E(有1个元素) 文件中的内容示例: 9864902,9864892,9864891,9864890,9864889,9864888,9864887,9864886,9864885,9864884,9864883,9864882,9864881,9864880,9864879,9864878,9864877,9864876,9864873,9864872,9864870,986486

我有5个文本文件,其中包含一些元素

  • A(有1000个元素)
  • B(有7个要素)
  • C(有3个要素)
  • D(有2个元素)
  • E(有1个元素)
  • 文件中的内容示例:

    9864902,9864892,9864891,9864890,9864889,9864888,9864887,9864886,9864885,9864884,9864883,9864882,9864881,9864880,9864879,9864878,9864877,9864876,9864873,9864872,9864870,9864869,9864868,9864867,9864866,9864865,9864864,9864863,9864862,9864861,9864858,9864857,9864856,9864855,9864854,9864853,9864852,9864851,9864850,9864849,9864848,9864847,9864846,9864845,9864844,9864843,9864842,9864841,9864840,9864839,9864838,9864837,9864836,9864835,9864834,9864833,9864832,9864831,9864830,9864829,9864828,9864827,9864826,9864825,9864824,9864823,9864822,9864821,9864820,9864819,9864818,9864817,9864816,9864815,9864814,9864813,9864812,9864811,9864810,9864809,9864808,9864807,9864806,9864805,9864804,9864803,9864802,9864801,9864800,9864799,9864798,9864797,9864796,9864795,9864794,9864793,9864792,9864791,9864790,9864789,9864788,9864787,9864786,9864785,9864784,9864783,9864782,9864781,9864780,9864779,9864778,9864777,9864776,9864775,9864774,9864773,9864772,9864771,9864770,9864769,9864768,9864767,9864766,9864765,9864764,9864763,9864762,9864761
    
    (还有更多,大约18k,但现在我只希望拿到前1000个。)

    下面是获取文本文件内内容的方法之一

    public string getA(int index)
    {
        // Contains 1000 elements
        string[] Array_A = File.ReadAllLines("D:\\user\\A.txt");
        string[] A = null;
        for (int i = 0; i < Array_A.Length; i++)
        {
           A = Array_A[i].Split(',');
        } 
        return A[index].ToString();
    }
    
    例如,UniqueCombination(7),我需要得到7个唯一的组合

    A(0)B(0)C(0)D(0)E(0)

    A(0)B(0)C(0)D(1)E(0)

    A(0)B(0)C(1)D(0)E(0)

    A(0)B(0)C(1)D(1)E(0)

    A(0)B(0)C(2)D(0)E(0)

    A(0)B(0)C(2)D(1)E(0)

    A(0)B(3)C(0)D(0)E(0)

    (以上是组合示例,因为E只有1个元素,所以始终返回第一个位置元素。)

    但是,对于这种情况,我希望得到数千个,可能最多5位数(20000)的组合。怎么做?我已经为随机索引编写了另一个方法。但是对于这个案子我不知道

    (注:元素的顺序并不重要,只是为了保证每个组合都是唯一的)

    如果您需要随机选择项目

    var randomCombinations = (from a in listA
                   from b in listB
                   from c in listC
                   from d in listD
                   select new[] { a, b, c, d })
                   .OrderBy(n => Guid.NewGuid())
                   .Take(size)
                   .ToList();
    
    您需要像下面这样的助手方法

        public List<string> ReadFileToList(string path)
        {
            List<string> temp = new List<string>();
            using (StreamReader r = new StreamReader(path))
            {
                string line;
                if ((line = r.ReadLine()) != null)
                {
                    temp =line.Split(',').ToList();
                }
            }
            return temp;
        }
    
    A,D,E,G|A,D,F,G|B,D,F,G|B,C,E,G|A,C,E,G|A,C,F,G|B,C,F,G
    
    结果将显示如下所示

        public List<string> ReadFileToList(string path)
        {
            List<string> temp = new List<string>();
            using (StreamReader r = new StreamReader(path))
            {
                string line;
                if ((line = r.ReadLine()) != null)
                {
                    temp =line.Split(',').ToList();
                }
            }
            return temp;
        }
    
    A,D,E,G|A,D,F,G|B,D,F,G|B,C,E,G|A,C,E,G|A,C,F,G|B,C,F,G
    
    或者如下扩展您的代码

    foreach (var item in combinations) { Console.WriteLine(string.Join(",", item)); }
    

    每次只想从文件中提取一项时,getA()方法都会读取整个文件?将文件读入一次并保留字符串[]数组更有意义。您的
    getA()
    函数将
    A
    数组的值覆盖1000次。你真的需要仔细考虑你的算法。拿一支铅笔和一些纸,用手浏览代码,写出每个变量的变化值。您将很快看到问题,因为getA()也用于获取Random()方法。它总是在文本文件中返回1个元素。我使用Split来获取文本文件中的单个元素。对Mike来说,是的,当我想要获取单个项目时,它会读取整个文件。我还是一个初学者,所以不是真的要写一个好的代码。对不起,我觉得这是个组合问题。这不是一件容易的事。请查看其中一些链接以供参考。还有这个,我想你只能在有序查询中使用take/skip?Damith,如何打印组合?仅供参考,我已经尝试过了,但失败了。下面是我的代码:foreach(组合中的var项){Console.WriteLine(项);}我只知道列表中有数组。所以控制台无法打印它们…需要格式化和附加。。。
    foreach (var item in combinations) { Console.WriteLine(string.Join(",", item)); }