从元素字段列表
List from fields of elements
我可以将我的字典 Dictionary<long,MyObj>
转换为包含 .Values
的列表,其中 MyObj
具有名为 position
的 Vector3
字段。
我想要一份职位列表(值类型):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':
我可以将我的字典 Dictionary<long,MyObj>
转换为包含 .Values
的列表,其中 MyObj
具有名为 position
的 Vector3
字段。
我想要一份职位列表(值类型):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':