如何从Element列表随机选取两个不同Id生成Link实例?
如何为Link实例生成两个不同的随机Element.Id?
没问题,我来帮你解决这个问题!你需要给每个Link实例传入两个不同的、随机选取的Element.Id,下面是具体的实现思路和代码:
核心思路
- 提前实例化一个
Random对象:不要在循环内每次创建Random,因为它依赖系统时钟,频繁创建会导致生成重复的随机数。 - 为每个
Link生成两个不同的随机索引:通过索引从ListOfElements中获取对应的Id,确保两个索引不重复,就能保证ElementOne和ElementTwo的Id永远不等。
完整代码示例
public class Element { public Element() { this.Id = Guid.NewGuid(); } public Guid Id { get; set; } } public class Link { public Link(Guid ElementOne, Guid ElementTwo) { this.ElementOne = ElementOne; this.ElementTwo = ElementTwo; } public Guid ElementOne { get; set; } public Guid ElementTwo { get; set; } } // 填充元素列表 List<Element> ListOfElements = new List<Element>(); for (int i = 0; i < 10000; i++) { ListOfElements.Add(new Element()); } // 初始化随机数生成器 var random = new Random(); List<Link> ListOfLinks = new List<Link>(); // 填充链接列表 for (int i = 0; i < 5000; i++) { // 获取第一个随机Element的Id int firstIndex = random.Next(ListOfElements.Count); Guid firstId = ListOfElements[firstIndex].Id; // 获取第二个随机Element的Id,确保和第一个不同 int secondIndex; do { secondIndex = random.Next(ListOfElements.Count); } while (secondIndex == firstIndex); Guid secondId = ListOfElements[secondIndex].Id; ListOfLinks.Add(new Link(firstId, secondId)); }
额外说明
- 你的
Element列表有10000个元素,重复选中同一个索引的概率极低,所以do-while循环几乎不会有多次迭代的情况,性能完全没问题。 - 如果想要避免极端情况下的循环(比如列表元素极少时),也可以先将所有
Element.Id存入一个临时列表,再随机抽取两个不同的Id,但对于你的场景,上面的写法已经足够简单高效。
内容的提问来源于stack exchange,提问作者user9145305
相关产品推荐
相关产品推荐

