【问题标题】:Assigning value to a two dimensional array为二维数组赋值
【发布时间】:2015-10-07 19:07:05
【问题描述】:

我有一个客户端服务器程序。客户是学生,所以我做了一个生成二维按钮数组的座位计划。

Button[,] btnSeat = new Button[8, 6];

客户端在线后,如何将客户端的主机名分配给每个按钮?假设已经有一个主机名。将第一个上线的用户分配给第一个数组[0,0],第二个分配给数组[0,1],以此类推....?

这是我的座位图布局

我还需要检索与该主机名相等的数组[x,y]。请帮忙,谢谢。

【问题讨论】:

  • 此外,您似乎需要跳过第 6 行和第 7 行的第 3-6 列。
  • 我认为数组在这里不是正确的数据结构,具有“计算机”数据结构的字典会更合适,使用主机名作为键,Computer 保存行/列位置、主机名以及您想要的有关工作站的任何数据。
  • 它已经处理好了:),我只需要一种方法来分配某个值并检索它,直到服务器停止接收数据
  • @RonBeyer 我没有查字典。您能否为我提供一个关于“使用主机名作为键并且计算机保持行/列位置”的示例。谢谢

标签: c# .net arrays client-server


【解决方案1】:

以下是我认为更好的数据结构的示例:

对于计算机,你需要保存一些信息,所以为计算机创建一个类:

public class Computer
{
    public string HostName { get; set; }
    public int Row { get; set; }
    public int Column { get; set; }
    //Whatever else you want to add, like
    public bool IsActive { get; set; }
    public bool IsScrewingAround { get; set; }
}

然后你可以使用字典来存储数据:

public Dictionary<string, Computer> _computers = 
     new Dictionary<string, Computer>(StringComparer.OrdinalIgnoreCase);

然后您将计算机添加到其中:

_computers.Add("someHostName", new Computer() 
    { 
      HostName = "someHostName", 
      Row = 0,  
      Column = 4, 
      IsActive = true, 
      IsScrewingAround = false 
    });

然后您可以在 O(1) 操作中按主机名查找计算机,例如:

var cpu = _computers["hostName"];

或者获取正在运行的计算机列表:

var screwOffs = _computers.Values.Where(c => c.IsScrewingAround);

想要第 4 行的所有计算机吗?

var row4 = _computers.Values.Where(c => c.Row == 4);

与数组相比,这为您提供了一个优势,即它可以根据添加到其中的Computers 的数量而增长,以防您的房间形状发生变化。

真的,如果您不需要 O(1) 查找主机名,这可能是 List&lt;Computer&gt; .

【讨论】:

  • 这看起来简洁明了。顺便说一句,我可以保留我制作的按钮集还是必须制作另一个 UI?
  • 您可以根据需要保留按钮,甚至在Computer 中设置对它们的对象引用,但我会避免这样做,以便您可以将业务逻辑与 UI 逻辑分开。
  • 嗯,我明白了...我会进一步研究。谢谢先生:)
猜你喜欢
  • 1970-01-01
  • 2017-01-29
  • 2019-07-18
  • 1970-01-01
  • 2015-06-16
  • 1970-01-01
  • 2021-12-31
相关资源
最近更新 更多