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