根据条件填写列表
Fill List based on condition
有没有更快的方法来根据矢量距离等函数填充列表?
private static IEnumerable<Vector2> SortSpecialBuildingsByDistance(
Vector2 house,
IEnumerable<Vector2> specialBuildings)
{
List<float> optionList = new List<float>();
foreach (var item in specialBuildings)
{
optionList.Add(Vector2.Distance(item, house));
}
}
您可以使用 Parallel.ForEach:
ConcurrentBag<Vector2> optionList = new ConcurrentBag<Vector2>();
Parallel.ForEach(specialBuildings, (item) => { optionList.Add(Vector2.Distance(item, house)); });
List 不是线程安全的,因此您需要使用 Thread-Safe Collections 之一。上面的示例使用了 ConcurrentBag,但还有其他的。
该代码可能不会 运行 更快,但您可以在一行中完成:
return specialBuildings.Select(item => Vector2.Distance(item, house)).ToList()
您可以尝试实施 PLinq (Parallel Linq):
List<float> optionList = specialBuildings
.AsParallel()
.Select(item => Vector2.Distance(item, house))
.ToList();
有没有更快的方法来根据矢量距离等函数填充列表?
private static IEnumerable<Vector2> SortSpecialBuildingsByDistance(
Vector2 house,
IEnumerable<Vector2> specialBuildings)
{
List<float> optionList = new List<float>();
foreach (var item in specialBuildings)
{
optionList.Add(Vector2.Distance(item, house));
}
}
您可以使用 Parallel.ForEach:
ConcurrentBag<Vector2> optionList = new ConcurrentBag<Vector2>();
Parallel.ForEach(specialBuildings, (item) => { optionList.Add(Vector2.Distance(item, house)); });
List 不是线程安全的,因此您需要使用 Thread-Safe Collections 之一。上面的示例使用了 ConcurrentBag,但还有其他的。
该代码可能不会 运行 更快,但您可以在一行中完成:
return specialBuildings.Select(item => Vector2.Distance(item, house)).ToList()
您可以尝试实施 PLinq (Parallel Linq):
List<float> optionList = specialBuildings
.AsParallel()
.Select(item => Vector2.Distance(item, house))
.ToList();