首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >c#混洗列表确定百分比

c#混洗列表确定百分比
EN

Stack Overflow用户
提问于 2019-02-12 19:41:33
回答 1查看 97关注 0票数 1

我正在使用一个函数来混洗并返回传递列表:

代码语言:javascript
复制
    public static List<E> ShuffleList<E>(List<E> inputList)
    {
        var randomList = new List<E>();

        var r = new Random();
        var randomIndex = 0;
        while (inputList.Count > 0)
        {
            randomIndex = r.Next(0, inputList.Count); 
            randomList.Add(inputList[randomIndex]);                 
            inputList.RemoveAt(randomIndex); 
        }

        return randomList;
    }

我面临的挑战是确定“如何随机化”后的混洗列表。我如何确保至少50%的元素不在它们的初始位置?

同样,目标是混洗列表和至少50%的列表元素来交换位置。

欢迎任何帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-02-12 20:23:16

首先,我对你的代码做了一个小的修复:

代码语言:javascript
复制
private static Random r = new Random();
public static List<E> ShuffleList<E>(List<E> inputList)
{
    var working = new List<E>(inputList);

    var randomList = new List<E>();

    var randomIndex = 0;
    while (working.Count > 0)
    {
        randomIndex = r.Next(0, working.Count);
        randomList.Add(working[randomIndex]);
        working.RemoveAt(randomIndex);
    }

    return randomList;
}

现在我可以测试它了。

代码语言:javascript
复制
void Main()
{
    var size = 100;
    var loops = 1000000;
    var original = Enumerable.Range(0, size).ToList();
    var counter = 0;
    var collisions = 0;
    while (counter++ < loops)
    {
        var shuffled = ShuffleList(original);
        collisions += shuffled.Select((x, n) => x == n).Where(x => x).Count();
    }
    Console.WriteLine((double)collisions / counter / size);
}

这是显示排序后处于相同位置的元素的平均数。运行这段代码后,我得到了像0.009985990014009990.01000271999728这样的结果。

您的代码成功地将100个列表中99%的数字移动到了一个新位置。

为了让你的生活更简单,你也可以将你的代码重写为:

代码语言:javascript
复制
private static Random r = new Random();

public static List<E> ShuffleList<E>(List<E> inputList)
    => inputList.OrderBy(x => r.Next()).ToList();
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54649366

复制
相关文章

相似问题

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