小编JCa*_*ter的帖子

两个坐标的相对基数方向

以下枚举定义如下:

public enum Direction
{
    North,
    South,
    East,
    West,
    Northeast,
    Northwest,
    Southeast,
    Southwest,
    Undefined
}
Run Code Online (Sandbox Code Playgroud)

给定二维空间中的两组坐标,我想确定从第2点到第1点的相对基数方向.

例子:

  • P1(1,1)和P2(0,1)返回Direction.North,因为P2是P1的北部
  • P1(1,1)和P2(5,4)返回Direction.Southeast
  • P1(1,1)和P2(1,1)返回Direction.Undefined

我目前的方法涉及一系列条件,即

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)

我正在寻求更短,更优雅的解决方案.

c# algorithm

6
推荐指数
1
解决办法
1842
查看次数

通过交换对二维数组进行排序的算法

对于一维数组,通过冒泡排序可以轻松实现交换排序,例如:

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)

项目可以垂直和水平交换,但不能对角交换:

  • 交换 4 和 1
  • 交换 8 和 5
  • 交换 8 和 6
  • 交换 9 和 8

这成为排序后的数组:

1 2 3
4 5 6
7 8 9
Run Code Online (Sandbox Code Playgroud)

我正在寻找一种可以有效实现这一目标的算法(最大限度地减少交换次数)。这个问题可能类似于15 拼图,尽管它要简单得多,因为每个项目都可以与相邻项目交换,而不仅仅是与空图块交换。

arrays sorting algorithm multidimensional-array

5
推荐指数
1
解决办法
1375
查看次数

匹配第一个冒号之前的所有内容,包括冒号和后面的空格

我想匹配一个字符串,以便

A: B: C
Run Code Online (Sandbox Code Playgroud)

将返回匹配(注意冒号后面的空格)

A: 
Run Code Online (Sandbox Code Playgroud)

它匹配所有内容,直到第一次出现冒号,但包括冒号及其后面的任何空格。

模式^[^\:]+会返回,A但不会返回冒号和空格。

regex

1
推荐指数
1
解决办法
3739
查看次数

在冒号/爆炸前匹配文本

我有可以采用以下格式的字符串:

  • 答:B:C
  • A - B - C.
  • A - B:C
  • 答:B - C.

在所有情况下,我需要提取所有内容B,包括冒号/ hypen及其后面的空格,因此对于示例,将遵循以下内容:

  • A:
  • 一个 -
  • 一个 -
  • A:

例如1,^[^:]*:\s*会起作用

例如2,^[^-]*-\s*会起作用

例如1,2和3,^([^-]*-|[^:]*:)\s*将起作用

我希望能够为所有例子提供所需的匹配.

regex

0
推荐指数
1
解决办法
985
查看次数

标签 统计

algorithm ×2

regex ×2

arrays ×1

c# ×1

multidimensional-array ×1

sorting ×1