我在这段代码上运行AQTime,我发现.IndexOf占用了16%的时间而接近80%的另一块......他们似乎使用相同的IsEqual和其他例程.被称为116,000次,插入30,000件物品.List <>对象都没有超过200个元素.(我可能错误地使用AQTime,我正在研究这个)
class PointD : IEquatable<PointD>
{
public double X, Y, Z;
bool IEquatable<PointD>.Equals(PointD other)
{
return ((X == other.X) && (Y == other.Y) && (Z == other.Z));
}
}
class PerfTest
{
readonly List<PointD> _pCoord3Points = new List<PointD>();
public int NewPoints;
public int TotalPoints;
public PerfTest()
{
NewPoints = 0;
TotalPoints = 0;
}
public int CheckPointIndexOf(PointD pt)
{
int retIndex = _pCoord3Points.IndexOf(pt);
if (retIndex < 0)
{
_pCoord3Points.Add(pt);
NewPoints++;
}
TotalPoints++;
return retIndex;
}
public int CheckPointForBreak(PointD pt) …Run Code Online (Sandbox Code Playgroud) 我有两个列表,我需要将一个列表与另一个列表进行排序。
var orderList = new List<long>() {4, 55, 34};
var itemList = new List<Branch>() { {Id=55, Name="X"}, {Id=34, Name="Y"}, {Id=4, Name="Z"} };
Run Code Online (Sandbox Code Playgroud)
我如何itemList根据第一个列表来订购第二个列表orderList?
有没有 linq 的捷径?
更新:
orderList将始终包含所有预期的Id分支itemList。
我有一个键值对列表,我想根据另一个数组中指定的顺序对其进行排序。
var requiredOrder = new String[] { "PH", "HH", "PR", "SR", "UN", "UD", "WD", "WE", "OT" };
var listToBeSorted = new List<KeyValuePair<string, string>>() {
new KeyValuePair<string, string>("A","PR"),
new KeyValuePair<string, string>("B","PH"),
new KeyValuePair<string, string>("C","HH"),
new KeyValuePair<string, string>("D","WD"),
new KeyValuePair<string, string>("E","OT"),
new KeyValuePair<string, string>("F","UN"),
.....
};
Run Code Online (Sandbox Code Playgroud)
“listToBeSorted”实际上是我为下拉列表获取的集合,该下拉列表需要根据“requiredOrder”数组按值排序。
我有一个像这样的独特物品清单:
List<Animals> ItemList = Cat, Dog, Bird, ...
Run Code Online (Sandbox Code Playgroud)
我正在尝试使用外部优先级列表对它进行排序,如下所示:
List<Animals> PriorityList = Dog, Cat, Bird, ...
Run Code Online (Sandbox Code Playgroud)
我发现我可以用这种方式正确排序项目:
ItemList.OrderBy(i => i == Dog).ThenBy(i => i.Cat).ThenBy(i => i.Bird)...
Run Code Online (Sandbox Code Playgroud)
但是这种方法的可扩展性非常糟糕。有人知道如何使用LINQ和PriorityList做到这一点吗?