新手求助:我在做一个客户端、服务器的通信,使用的控件为TServerSocket/TClientSocket,有个问题试了很多方法还是不行:服务器定义了一个客户端的信息类:
type
  client_record = record
  name:string;
  id:string;
end;每次客户端连接上来之后,我就想把client_record保存到一个类似Java中Map的容器中(刚接触delphi,不清楚类似Map的是什么),保存为键值对。比如add(name, client_record)这样用名字key,我定义的client_record为value;下次我可以直接通过name取出client_record,或者通过name删除这个键值对!如果可以麻烦给出代码,非常谢谢delphirecordMapTServerSocket

解决方案 »

  1.   

    type
      pClient_record =^client_record;
      client_record = record
      name:string;
      id:string;
    end;再定义一个全局的List(FClientList: TList);
    需要保存客户信息的时候,定义一个变量client: pclient_record;
    isExists: boolean;
    begn
      isExists := false;
      for i := 0 to FList.count - 1 do
      begin 
        if pclient_record(Flist[i])^.id = 新传进来的客户的id then begin
          showmessage('已存在');
          isexists := true;
          break;
        end;
      end;
    end;if not isexists then 
    begin
      client = new(pclient_record);
      client^.name = 'name';
      client^.id = '123';
      FList.add(client);
    end;
      

  2.   


    这样保存在List,好像我需要找到某个对象的时候也需要整个遍历,有没有想map那样的键值对,可以直接map.get(key);  然后就返回这个对象给我呢?谢谢
      

  3.   

    HSFZXJY 正解,我解释一下吧。TStringList 比 TList 每个节点多一个字符串,楼主不妨利用此字符串保存 key 值。只要用 IndexOf(key) 就能一下子找到此节点。具体做法:用 TStringList.Strings[] 数组保存 key, 用 TStringList.Objects[] 数组保存数据记录指针(和 TList 一样)。