根据条件填写列表

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();