我正在嘗試在 Grasshopper 中生成 10 個隨機點,并使用以下代碼將它們添加到串列中:
private void RunScript(object x, object y, ref object A)
{
List<Point3d> pts = new List<Point3d>();
//List<Point3d> temp = new List<Point3d>();
Point3d origin = new Point3d(20, 20, 0);
pts.Add(origin);
//temp.Add(origin);
Random r = new Random();
int i = 0;
while (i < 10){
Point3d pt_temp = new Point3d(r.Next(20, 30), r.Next(20, 30), 0);
foreach (Point3d p in pts){
if (p != pt_temp){
pts.Add(pt_temp);
i ;
}else{
break;
}
}
}
A = pts;
}
我無法執行列舉操作。我進行了很多搜索,但找不到將隨機唯一元素添加到迭代串列的類似案例的解決方案。
uj5u.com熱心網友回復:
試試這個,你的代碼無法編譯,因為使用foreach錯誤
List<Point3D> pts = new List<Point3D> { new Point3D(20, 20, 0)};
Random r = new Random();
int i = 0;
while (i < 10)
{
Point3D pt_temp = new Point3D(r.Next(20, 30), r.Next(20, 30), 0);
if (pts.Any(p => p == pt_temp)) continue;
pts.Add(pt_temp);
i ;
}
A = pts;
沒有 linq 的變體
List<Point3D> pts = new List<Point3D> { new Point3D(20, 20, 0) };
Random r = new Random();
int i = 0;
while (i < 10)
{
Point3D pt_temp = new Point3D(r.Next(20, 30), r.Next(20, 30), 0);
var exist = false;
foreach (var item in pts) { if (item == pt_temp) exist = true; break; }
if (exist) continue;
pts.Add(pt_temp);
i ;
}
A = pts;
uj5u.com熱心網友回復:
好吧,解決此類問題的規范方法是在這種特殊情況下使用 Set、HashSet。Set 將保證元素的唯一性
順其自然(未經測驗!)
var r = new HashSet<PointD>();
while (r.Count < 10) {
r.Add(new Point3D(......));
}
return r;
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/411447.html
標籤:
