随机对象到列表而不重复

时间:2016-04-16 09:06:04

标签: c# list object random repeat

我这边有点问题。我有一个问题列表KlausimuList,我必须形成另一个列表Atsitiktinis女巫将是一个随机长度,并会随机提问KlausimuList。我的方法有效,但问题是 - 问题是重复的。你能不能给我写一个代码?我有一个想法,我已经添加了一个单独的int数组索引,然后每次检查该问题是否已经在该列表中。如果是的话 - 生成一个新的数字,但我只是不知道如何为这个东西编写代码:D。谢谢你的建议。代码在c#。

static void FormuotiAtsisiktini(List<Klausimas> KlausimuList, ref List<Klausimas> Atsitiktinis)
    {
        Random kiek = new Random();
        int kiekis = kiek.Next(1, KlausimuList.Count);
        for (int i = 0; i < kiekis; i++)
            Atsitiktinis.Add(KlausimuList[kiek.Next(1, KlausimuList.Count)]);
    }

3 个答案:

答案 0 :(得分:1)

您可以使用virtualenv来避免重复。尝试添加重复项时,HashSet上的Add方法会返回HashSet

false

答案 1 :(得分:0)

这应该有效。它会创建原始列表的副本,并从中删除已经获取的项目:

m <- matrix(1:5, nrow=5, 1, dimnames=list(LETTERS[1:5], NULL))
tf <- matrix(c(FALSE, FALSE, TRUE), ncol=3, dimnames=list(NULL, c("E", "B", "A")))

答案 2 :(得分:0)

您所描述的内容称为无需替换的抽样,this SO post中提供了解决方案。此外,为了确保您实际向集合中添加重复项,请考虑使用static List<Klausimas> FormuotiAtsisiktini(List<Klausimas> KlausimuList) { Random kiek = new Random(); List<Klausimas> source = new List<Klausimas>(KlausimuList); List<Klausimas> result = new List<Klausimas>(); int kiekis = kiek.Next(1, KlausimuList.Count); for (int i = 0; i < kiekis; i++) { var match = source[kiek.Next(0, source.Count - 1)]; result.Add(match); source.Remove(match); } return result; } 而不是HashSet