我这边有点问题。我有一个问题列表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)]);
}
答案 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
。