以下枚举定义如下:
public enum Direction
{
North,
South,
East,
West,
Northeast,
Northwest,
Southeast,
Southwest,
Undefined
}
Run Code Online (Sandbox Code Playgroud)
给定二维空间中的两组坐标,我想确定从第2点到第1点的相对基数方向.
例子:
我目前的方法涉及一系列条件,即
if (P1.X == P2.X)
{
// either North, South or Undefined
if (P1.Y < P2.Y)
return Direction.South;
else if (P1.Y > P2.Y)
return Direction.North,
else
return Direction.Undefined;
}
else if (P1.Y == P2.Y)
{
...
}
else
{
...
}
Run Code Online (Sandbox Code Playgroud)
我正在寻求更短,更优雅的解决方案.
对于一维数组,通过冒泡排序可以轻松实现交换排序,例如:
5 4 9 8 7 1 6 3 2 10
Run Code Online (Sandbox Code Playgroud)
需要 25 次交换才能输出
1 2 3 4 5 6 7 8 9 10
Run Code Online (Sandbox Code Playgroud)
然而,在二维数组中,我们有这样的东西。
4 2 3
1 8 5
7 9 6
Run Code Online (Sandbox Code Playgroud)
项目可以垂直和水平交换,但不能对角交换:
这成为排序后的数组:
1 2 3
4 5 6
7 8 9
Run Code Online (Sandbox Code Playgroud)
我正在寻找一种可以有效实现这一目标的算法(最大限度地减少交换次数)。这个问题可能类似于15 拼图,尽管它要简单得多,因为每个项目都可以与相邻项目交换,而不仅仅是与空图块交换。
我想匹配一个字符串,以便
A: B: C
Run Code Online (Sandbox Code Playgroud)
将返回匹配(注意冒号后面的空格)
A:
Run Code Online (Sandbox Code Playgroud)
它匹配所有内容,直到第一次出现冒号,但包括冒号及其后面的任何空格。
模式^[^\:]+会返回,A但不会返回冒号和空格。
我有可以采用以下格式的字符串:
在所有情况下,我需要提取所有内容B,包括冒号/ hypen及其后面的空格,因此对于示例,将遵循以下内容:
例如1,^[^:]*:\s*会起作用
例如2,^[^-]*-\s*会起作用
例如1,2和3,^([^-]*-|[^:]*:)\s*将起作用
我希望能够为所有例子提供所需的匹配.