如何从表格中的单元格获取周围信息

时间:2010-11-23 16:36:05

标签: c#

背景

我正在寻找有关如何处理此问题的提示/指示。当我搜索表格或网格时,我得到的UI东西不是我想要的东西。

我不知道这听起来像是作业,但事实并非如此。这是作物的地图,我需要确定在特定土地周围种植的作物。

问题

我有一个信息表,它有6行乘6列,但可以是任意大小

我需要在该表中找到一个方框,然后从其周围的所有方框中获取信息。

|-1-|-2-|-3-|-4-|-5-|-6-|
|-7-|-8-|-9-|-A-|-B-|-C-|
|-D-|-E-|-F-|-G-|-H-|-I-|
|-J-|-K-|-L-|-M-|-N-|-O-|
|-P-|-Q-|-R-|-S-|-T-|-U-|
|-V-|-W-|-X-|-Y-|-Z-|-0-|

所以我需要能够选择方框M并获取F,G,H,N,T,S,R,L的信息

注意,如果需要框J,则可以为左侧不存在的框返回空格或空值。它没有环绕并从表的另一侧获取框。

我的想法

我想我可以从数组数组开始。

private static string[][] tableData;

因此,当查找方框M时,我需要得到M的row(i)和column(j)索引,然后周围的单元格像“简单”一样:

| i-1, j-1 | i-1, j | i-1, j+1 |
| i, j-1   | i, j   | i, j+1   |
| i+1, j-1 | i+1, j | i+1, j+1 |

当被问到方框M时,我可以找到方框M的索引,然后得到先前的“行”,然后索引-1,索引和索引+ 1.对于M的行-1,M的行然后是M的那个行+ 1。

这是一种公平和良好的方式吗?还是有更好的,也许已经建立的类我应该使用?

所以问题:数组数组是处理这个问题的最佳方法,还是有更好的方法?

3 个答案:

答案 0 :(得分:4)

内置任何东西都不会让你以你描述的方式获得“周围”的细胞。

二维char(或字符串)数组看起来像是一个很好的匹配,就像你已发布的那样。

你可以在一个可以返回包含邻居的3 * 3数组的类中编写它。

答案 1 :(得分:4)

您选择的数据结构将严重依赖于确切的问题特征。例如,如果您只有一小部分单元格中有数据,并且您有很多单元格(数万或数百万),那么您可能希望实现sparse array。否则,您可以使用多维数组或锯齿状数组。

Jagged数组(你提到的那个):

private static string[][] tableData;

多维数组:

private static string[,] tableData;

如果你不处理方形图,你可能会考虑完全不同的数据结构。

尽管多维数组可能更容易使用,但锯齿状数组在CLR上具有更好的性能。

Why are multi-dimensional arrays in .NET slower than normal arrays?

您的数组操作算法可能会促使您选择一种数据结构而不是另一种数据结构。所有这些都说,我建议将数据结构封装在一个类中,以便在需要时可以更轻松地切换表示。

(我不会使用DataTable。对于你没有使用的功能来说,这是一大笔开销。)

答案 2 :(得分:1)

C#有:

private static string[,] tableData; 

否则我认为你的方法是正确的。确保你记得考虑桌子的边缘。