我正在使用这些表来存储课程one部分的主题名称。我的问题是,如何才能将主题名称从一个表插入到另一个表中,使两个主题不能在同一时间出现。
示例:
Table-1
Hour Subject-name
1 C#
2 Java
3 OS
4 C++
5 DBMS我需要以这样的方式将同一组值输入到另一个表中,比如table-2:
Table-2
Hour Subject-name
1 OS
2 DBMS
3 C#
4 Java
5 C++我已经习惯于对列表进行混洗操作,以便随机地混洗元素。但是,同一主题有可能出现两次。
public static void Shuffle<T>(IList<T> list)
{
int n = list.Count;
while (n > 1)
{
n--;
int k = rng.Next(n + 1);
T value = list[k];
list[k] = list[n];
list[n] = value;
}
}发布于 2016-05-10 14:57:01
您需要对执行操作,然后检查是否违反了您的规则,然后重试。
下面是这样做的一种方法:
Random rng = new Random();
private IList<Course> SmartShuffle(IList<Course> oldList)
{
IList<Course> newList = new List<Course>();
while (true)
{
var randomOrder = oldList.OrderBy(x => rng.Next()).ToList();
int counter = 0;
foreach(var course in oldList)
{
newList.Add(new Course() { Name = randomOrder[counter].Name, Hour = course.Hour });
counter++;
}
int differenceCount = newList.Count(n => oldList.Any(o => o.Name == n.Name && o.Hour != n.Hour));
// leave only one of the below if statements
// case at least 1 element should be different
if (differenceCount > 0)
break;
// case all elements must be different
if (differenceCount == oldList.Count)
break;
}
return newList;
}
public class Course
{
public string Name { set; get; }
public int Hour { set; get; }
}https://stackoverflow.com/questions/37130248
复制相似问题