C# 从列表中创建字符串对-有人吗?

C# 从列表中创建字符串对-有人吗?,c#,string,C#,String,我们公司有x个员工。我们想在C#中生成一个轮盘赌-茶歇应用程序来运行,在这个应用程序中,订阅此功能的用户将把自己的姓名添加到文本文件的列表中 然后我们想“旋转轮子”(点击一个按钮…),从这个名字列表中生成一对,然后他们将一起安排茶歇 示例列表(从文本文件加载): 彼得 玛丽 琼 詹姆斯 院长 劳拉 一旦我们点击按钮旋转轮子 我们需要: 生成配对名称的新列表,例如: 玛丽将和詹姆斯一起喝茶 迪安将和彼得一起喝茶 琼将和劳拉一起喝茶 我正在试图找出如何编写代码。 条件: 本月spin的输出存储到

我们公司有x个员工。我们想在C#中生成一个轮盘赌-茶歇应用程序来运行,在这个应用程序中,订阅此功能的用户将把自己的姓名添加到文本文件的列表中

然后我们想“旋转轮子”(点击一个按钮…),从这个名字列表中生成一对,然后他们将一起安排茶歇

示例列表(从文本文件加载):

  • 彼得
  • 玛丽
  • 詹姆斯
  • 院长
  • 劳拉
  • 一旦我们点击按钮旋转轮子 我们需要:

    生成配对名称的新列表,例如:

    • 玛丽将和詹姆斯一起喝茶
    • 迪安将和彼得一起喝茶
    • 琼将和劳拉一起喝茶
    我正在试图找出如何编写代码。 条件: 本月spin的输出存储到另一个文本文件中,根据该文件,James本月与Mary一起喝茶,并且在至少6个月内不会再与Mary一起喝茶。 示例文本文件-每月追加:

    * 01MAY2015,2,4
    * 01MAY2015,5,1
    * 01MAY2015,3,6
    * etc...
    
    最终输出列表项计数将是主列表项数的一半。因此,每次车轮转动时,您都不会看到任何名字与多人喝茶

    下个月,我们将检查前几个月的输出列表,以确保名称不会再次配对

    以前有人做过这样的事吗

    我的配对代码如下:

    在“旋转”按钮的点击事件中:

    List q=新列表(Variables.gsNames)//我将名称加载到全局变量列表中
    列表对=新列表(Variables.gsNames.Length*(Variables.gsNames.Length-1));//我将这些对加载到另一个全局变量列表中
    而(q.Count>0)
    {
    字符串n1=q[0];
    q、 RemoveAt(0);//name1是下一行
    //尝试与第一个以前未与此名称配对的人配对
    foreach(q中的字符串n2)
    {
    //创建一个规范化的“候选者”对,其中下一个名称在行中
    字符串p=字符串。比较(n1,n2)<0?n1+“和“+n2:n2+”和“+n1;
    如果(!pairs.Contains(p))
    {
    //这两名员工以前从未配对过
    配对。添加(p);
    q、 移除(n2);
    q、 添加(n1);
    q、 添加(n2);
    ListViewItem lvi=新ListViewItem(p);
    lvPairs.Items.Add(lvi);
    //记录该对,并将名称移动到行尾
    打破
    }
    }
    }
    
    我感谢您对此给予的任何帮助或指导。 提前感谢您的帮助。
    Len

    我写了这样的东西:

    var matches = new List<TeaParty>();
    var people  = new List<Person>()
    {
        new Person { Id = 1, Name = "Peter" },
        new Person { Id = 2, Name = "Mary"  },
        new Person { Id = 3, Name = "Joan"  },
        new Person { Id = 4, Name = "James" },
        new Person { Id = 5, Name = "Dean"  },
        new Person { Id = 6, Name = "Laura" },
    };
    
    但是,该程序在第一次交互后失败:

    Month #1
    Peter will have tea with Mary
    Joan will have tea with James
    Dean will have tea with Laura
    
    Month #2
    Peter will have tea with Joan
    Mary will have tea with James
    
    迪恩在哪里

    当彼得和玛丽在他们之间交换舞伴时,迪恩被留下来和劳拉一起喝茶,而这是规定所禁止的

    如果有人想从这一点继续,下面是代码的其余部分:

    class Person
    {
        public int    Id    { get; set; }
        public string Name  { get; set; }
    
        public override string ToString()
        {
            return this.Name;
        }
    }
    
    class TeaParty
    {
        public DateTime Date  { get; set; }
        public Person Inviter { get; set; }
        public Person Invitee { get; set; }
    
        public TeaParty() { }
        public TeaParty(DateTime date, Person inviter, Person invitee) : this()
        {
            this.Date = date;
            this.Inviter = inviter;
            this.Invitee = invitee;
        }
    
        public bool Contains(params Person[] guests)
        {
            return guests != null && guests
                .Any(guest => this.Inviter.Id == guest.Id || this.Invitee.Id == guest.Id);
        }
    
        public override string ToString()
        {
            return String.Format("{0} will have tea with {1} at {2:D}", 
                this.Inviter, this.Invitee, this.Date);
        }
    }
    

    一次创建一个6个月的独特列表难道没有意义吗?首先,你需要把它分开。编写一个方法,该方法接受
    List
    并返回
    List
    ,其中
    teaaparty
    是一个具有两个字符串属性的对象。不要这样做。这段代码遇到的确切问题是什么?我建议提出这个问题来感谢你,内森。我可以对它进行审查,看看这是否合理。
    Month #1
    Peter will have tea with Mary
    Joan will have tea with James
    Dean will have tea with Laura
    
    Month #2
    Peter will have tea with Joan
    Mary will have tea with James
    
    class Person
    {
        public int    Id    { get; set; }
        public string Name  { get; set; }
    
        public override string ToString()
        {
            return this.Name;
        }
    }
    
    class TeaParty
    {
        public DateTime Date  { get; set; }
        public Person Inviter { get; set; }
        public Person Invitee { get; set; }
    
        public TeaParty() { }
        public TeaParty(DateTime date, Person inviter, Person invitee) : this()
        {
            this.Date = date;
            this.Inviter = inviter;
            this.Invitee = invitee;
        }
    
        public bool Contains(params Person[] guests)
        {
            return guests != null && guests
                .Any(guest => this.Inviter.Id == guest.Id || this.Invitee.Id == guest.Id);
        }
    
        public override string ToString()
        {
            return String.Format("{0} will have tea with {1} at {2:D}", 
                this.Inviter, this.Invitee, this.Date);
        }
    }