首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过比较将数据插入到表中

通过比较将数据插入到表中
EN

Stack Overflow用户
提问于 2016-05-10 13:53:12
回答 1查看 53关注 0票数 0

我正在使用这些表来存储课程one部分的主题名称。我的问题是,如何才能将主题名称从一个表插入到另一个表中,使两个主题不能在同一时间出现。

示例:

代码语言:javascript
复制
Table-1

Hour     Subject-name

1           C#
2           Java
3           OS
4           C++
5           DBMS

我需要以这样的方式将同一组值输入到另一个表中,比如table-2

代码语言:javascript
复制
Table-2

Hour            Subject-name

1                OS
2                DBMS
3                C#
4                Java
5                C++

我已经习惯于对列表进行混洗操作,以便随机地混洗元素。但是,同一主题有可能出现两次。

代码语言:javascript
复制
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;
    }
}
EN

回答 1

Stack Overflow用户

发布于 2016-05-10 14:57:01

您需要对执行操作,然后检查是否违反了您的规则,然后重试。

下面是这样做的一种方法:

代码语言:javascript
复制
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; }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37130248

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档