从元素字段列表

List from fields of elements

我可以将我的字典 Dictionary<long,MyObj> 转换为包含 .Values 的列表,其中 MyObj 具有名为 positionVector3 字段。

我想要一份职位列表(值类型):MyObj.position,像这样:List<Vector3> positions.

性能至关重要。

有没有办法在 C# 中使用 LINQ 或其他方式实现此目的?

foreach e in myDict
   mylist.Add(e.Value.position)

所以,使用下面的代码:

    public static void Main(string[] args)
    {
        var stopwatch1 = new Stopwatch();
        var dictionaryTest = GetDictionary(1000);

        stopwatch1.Start();

        var results = dictionaryTest.Values.Select(x => x.Position).ToList();

        stopwatch1.Stop();

        var stopwatch2 = new Stopwatch();
        stopwatch2.Start();

        var results2 = dictionaryTest.Select(obj => obj.Value.Position).ToList();

        stopwatch2.Stop();

        var stopwatch3 = new Stopwatch();
        stopwatch3.Start();

        var myList = new List<double>();

        foreach (var pair in dictionaryTest)
        {
            myList.Add(pair.Value.Position);
        }

        stopwatch3.Stop();

        Console.WriteLine("results1: " + stopwatch1.Elapsed);
        Console.WriteLine("results2: " + stopwatch2.Elapsed);
        Console.WriteLine("results3: " + stopwatch3.Elapsed);
        Console.Read();
    }

    public static Dictionary<long, MyUser> GetDictionary(int numberOfRows)
    {
        var d = new Dictionary<long, MyUser>();

        for (int i = 0; i < numberOfRows; i++)
        {
            d.Add(1000 + i, new MyUser { Age = 10 + i, Position = 100.01 + i });
        }

        return d;
    }

这带回了:

所以 foreach 看起来像是我机器上建议的 3 个中最快的。不过值得自己测试一下。

已选择 'optimize code':