关于Delphi中存储用户对象的有关问题
关于Delphi中存储用户对象的问题
新手求助:我在做一个客户端、服务器的通信,使用的控件为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删除这个键值对!
如果可以麻烦给出代码,非常谢谢
------解决方案--------------------
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;
------解决方案--------------------
TStringList
------解决方案--------------------
HSFZXJY 正解,我解释一下吧。
TStringList 比 TList 每个节点多一个字符串,楼主不妨利用此字符串保存 key 值。只要用 IndexOf(key) 就能一下子找到此节点。具体做法:用 TStringList.Strings[] 数组保存 key, 用 TStringList.Objects[] 数组保存数据记录指针(和 TList 一样)。
新手求助:我在做一个客户端、服务器的通信,使用的控件为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删除这个键值对!
如果可以麻烦给出代码,非常谢谢
delphi
record
Map
TServerSocket
------解决方案--------------------
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;
------解决方案--------------------
TStringList
------解决方案--------------------
HSFZXJY 正解,我解释一下吧。
TStringList 比 TList 每个节点多一个字符串,楼主不妨利用此字符串保存 key 值。只要用 IndexOf(key) 就能一下子找到此节点。具体做法:用 TStringList.Strings[] 数组保存 key, 用 TStringList.Objects[] 数组保存数据记录指针(和 TList 一样)。