【问题标题】:How Do you Randomly Select a line in a textfile, display it on a label and remove from list?您如何随机选择文本文件中的一行,将其显示在标签上并从列表中删除?
【发布时间】:2021-03-17 13:17:59
【问题描述】:

我想在我的文本文件中随机选择一行并将其显示在标签上并将其删除,因此除非文本文件已用完行,否则无法再次看到它,我知道如何读取但不显示随机行并将其删除...

作为参考,我正在创建一个游戏,并且在我的启动画面中,我正在显示提示并在每次显示时都将其删除,但每次将其删除时都会进行计数,如果没有任何内容,则清除列表...

               void trsting()
    {
        List<string> facts = new List<string>();

        Random r = new Random();

        StreamReader factr = new StreamReader("MarioBrosFacts.txt");

        string line = "";

        while (!factr.EndOfStream)
        {
            line = factr.ReadLine();
            facts.Add(line);
        }

        label2.Text = "Fun Fact:  " + facts[r.Next(1, facts.Count)];
    }

【问题讨论】:

    标签: c# random display


    【解决方案1】:

    如果文本文件不是很大,这里是简单的解决方案

        private void DoJob()
        {
            List<string> data= System.IO.File.ReadAllLines(@"C:\MarioBrosFacts.txt").ToList();
            while (data.Count()>0)
            {
                int line = new Random().Next(1,data.Count())-1;
                MarioBrosClass.MarioBrosFact.Add(data[line]);
                data.RemoveAt(line);
            }
    
        }
    

    如果你想在标签中显示线条,你必须使用线程和调用方法来避免表单挂起

        private void Form1_Load(object sender, EventArgs e)
        {
            Thread tr = new Thread(() => DoJob());
            tr.Start();
        }
    
        private void DoJob()
        {
            List<string> MarioBrosFact = new List<string>();
            List<string> data = System.IO.File.ReadAllLines(@"D:\MarioBrosFacts.txt").ToList();
            while (data.Count() > 0)
            {
                int line = new Random().Next(1,data.Count()) - 1;
                MarioBrosFact.Add(data[line]);
                this.Invoke(new MethodInvoker(delegate
                {
                    label1.Text = data[line];
                }));
                System.Threading.Thread.Sleep(1000);
                data.RemoveAt(line);
            }
    
        }
    

    【讨论】:

    • 好的,非常感谢您的回复,但如果我想在标签中显示它,我应该在哪里包含它(label2)
    • 因为你知道循环速度非常高,你只能在迭代结束时看到最后一个值。
    • 随机函数中使用值'1'作为第一个参数,代码已更新。
    • 因此,尽管我在表单上使用了计时器,并且在使用 system.threading 时它会导致问题,但它显示和工作得很好,我找到了另一种显示它但没有删除它的方法......做你想让我给你看那个代码,你可以告诉我如何删除它?
    • 绝对。这是我的电子邮件地址:hjolany@gmail.com
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-02
    • 1970-01-01
    • 1970-01-01
    • 2018-10-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多