C# 如何从表中的单元格获取周围信息 背景

C# 如何从表中的单元格获取周围信息 背景,c#,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-|-

我正在寻找关于如何实现这一点的提示/指针。当我搜索表格或网格时,我得到的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,可以为左侧不存在的方框返回空格或null。它不会绕着桌子的另一边拿盒子

我的想法 我想我可以从数组开始

private static string[][] tableData;
因此,在查找框M时,我需要获得M的行(I)和列(j)索引,然后周围的单元格“简单”如下:

当问到框M时,我可以找到框M的索引,然后得到前面的“行”,然后是索引-1、索引和索引+1。对M的行-1,M的行,然后M的行+1这样做

这是一种公平且好的方法吗?还是有更好的、可能已经构建好的类我应该使用

那么问题是:数组是处理此问题的最佳方法,还是有更好的方法?C#有:


否则我认为你的方法是正确的。请务必记住要考虑桌子的边缘。p> 没有任何内置功能可以简单地让您以您描述的方式获取“周围”细胞

正如您已经发布的,二维字符(或字符串)数组看起来很匹配


您可以将其写入一个类中,该类可以返回一个包含邻居的3*3数组。

您选择的数据结构在很大程度上取决于确切的问题特征。例如,如果您只有一小部分单元格中的数据,而您有很多单元格(数万或数百万),那么您可能希望实现一个新的应用程序。否则,可以使用多维数组或锯齿数组

锯齿阵列(您提到的阵列):

多维数组:

private static string[,] tableData;

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

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

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


(而且我不会使用DataTable。这对于您不使用的功能来说是一个很大的开销。)

不过我忘记了[,]数组,我认为它可能更容易使用,因为我不需要不同的大小。表格应始终为“矩形”+1:我同意Oded的观点,我删除了我的答案,因为我误解了这个问题。最好使用二维数组,因为OP已经在做了。幸运的是,表将相当小,最多30x30。绝对要将其封装到一个类中。在这种情况下,我将使用字符串[,]。将其封装到类中绝对是一个好主意。关于性能的好消息。我当然认为会是另一种情况,但我想CLR也有它的惊喜,性能差异可能并不重要(总是测量!),但要记住一些东西。将数据结构封装在类中是一个很好的理由,这样您就可以在必要时轻松地交换impl。
private static string[,] tableData; 
private static string[][] tableData;
private static string[,] tableData;