【发布时间】:2022-01-06 18:55:07
【问题描述】:
public class Witness
{
public Mobile m_mobile;
public bool m_hasLOS;
public double m_distanceToSqrt;
public Witness(Mobile m, bool hasLOS, double distanceToSqrt)
{
m_mobile = m;
m_hasLOS = hasLOS;
m_distanceToSqrt = distanceToSqrt;
}
}
我已经创建了这些对象“见证”的列表,现在想在 m_hasLOS 和 m_distanceToSqrt 上对其进行排序。
在我的代码中我调用:
List<Witness> sorted = witnesses.OrderBy(x => x.m_hasLOS).ThenBy(x => x.m_distanceToSqrt).ToList();
这可行,但列表没有按我的意愿排序。如何更改排序方式:LOS 始终位于列表顶部,按升序排列? 而在 LOS 为假的情况下,列表只是上升距离?
例如:
o1: m_LOS = true, m_distanceToSqrt = 13
o2: m_LOS = false, m_distanceToSqrt = 6
o3: m_LOS = false, m_distanceToSqrt = 2
应该产生reaultant排序:
o1: m_LOS = true, m_distanceToSqrt = 13
o3: m_LOS = false, m_distanceToSqrt = 2
o2: m_LOS = false, m_distanceToSqrt = 6
【问题讨论】:
-
请注意,
false < true,这就是为什么.OrderByDescending(x => x.m_hasLOS).ThenBy(x => x.m_distanceToSqrt)。请注意降序 -
如果您不想记住是
false<true还是false>true,请将布尔转换为您知道排序方向的东西..OrderBy(x => x.HasLOS ? 0 : 1) -
公共成员的 C# 命名约定是 PascalCase,没有前缀
-
谢谢你,完美。正是我需要的。 @Caius,是的,我试图通过省略 PascalCase 公共属性来最小化示例大小。
-
没问题!这确实是一堂恋爱课????。笨蛋