DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: sheik8888
今日帖子: 35
在线用户: 29
导航: 论坛 -> DELPHI技术 斑竹:liumazi,sephil  
作者:
男 zuiailele (lele) ▲▲▲▲△ -
注册会员
2018/9/7 22:14:38
标题:
如何直接修改TLIST<RECODR>中的值 浏览:480
加入我的收藏
楼主: 不用先复制出来所有值再改回去的,能直接修改的方法
----------------------------------------------
-
作者:
男 a5824 (Return) ▲▲▲▲△ -
注册会员
2018/9/7 22:55:21
1楼: 没懂意思?为啥要复制?不是直接指针操作吗?
----------------------------------------------
作者:
男 bahamut8348 (leonna) ▲▲▲▲▲ -
普通会员
2018/9/7 22:58:11
1楼: var
list: tlist<record>;
...
begin
  list.list[0].??? = ...;
end;

但是这种办法有点扯淡。既然你要随时修改项的值,那你起先就该保存结构的指针,而不是结构的值。
----------------------------------------------
--
作者:
男 zuiailele (lele) ▲▲▲▲△ -
注册会员
2018/9/7 23:00:21
2楼: 网上搜索也是用list.list[0]这个方法,可是我这出不来这个.list[0]属性,用的是DELPHI2010
----------------------------------------------
-
作者:
男 bahamut8348 (leonna) ▲▲▲▲▲ -
普通会员
2018/9/8 0:41:39
3楼: 那简单了,要么换版本,要么改成指针。按此在新窗口浏览图片
----------------------------------------------
--
作者:
男 iamdream (银河恒久远,梦想无止境!) ★☆☆☆☆ -
大贡献会员
2018/9/8 13:08:52
4楼: 不是list.Items[...]么?
----------------------------------------------
-广袤璀璨的银河,永无止境的梦想(梦无止境游银河) 偶的生活博客  偶的技术军事博客
作者:
男 iamdream (银河恒久远,梦想无止境!) ★☆☆☆☆ -
大贡献会员
2018/9/8 13:09:11
5楼: 用对象吧
----------------------------------------------
-广袤璀璨的银河,永无止境的梦想(梦无止境游银河) 偶的生活博客  偶的技术军事博客
作者:
男 zuiailele (lele) ▲▲▲▲△ -
注册会员
2018/9/9 11:35:23
6楼: 看了下还是转成指针最简单,是在添加的时候用NEW(P)
释放的时候用DISPOSE(mylist[0])这样的吧
----------------------------------------------
-
作者:
男 hs_kill (lzl_17948876) ▲▲▲▲▲ -
普通会员
2018/9/10 10:09:37
7楼: 这里有我之前的一个分析, 没深入思考
https://www.cnblogs.com/lzl_17948876/p/3579698.html

对于泛型结构体一般做法都是存指针
----------------------------------------------
http://www.cnblogs.com/lzl_17948876/
作者:
男 bahamut8348 (leonna) ▲▲▲▲▲ -
普通会员
2018/9/11 10:13:02
8楼: 看代码,list.items属性在取值的时候会返回一个item的拷贝,而不是item本身。而list属性则是返回了数组本身。

泛型list一般用于存只读列表的机会比存放读写列表的机会更多点。如果你全部都要用指针的话,那有什么必要用泛型的list呢?最早的那个存指针的list不就够了么?

还有,7楼的那个分析,你根本就没搞清楚基本原理。就算高版本的delphi允许在结构体里定义方法,但是结构和类还是有本质区别的。这个可能在c++里提到的机会更大。

区别很简单,结构是值类型的而类是引用类型的。
----------------------------------------------
--
作者:
男 iamdream (银河恒久远,梦想无止境!) ★☆☆☆☆ -
大贡献会员
2018/9/12 19:18:32
9楼: 顶楼上,一直没注意TList的List属性,以前老的Delphi版本里TList.List是PPointerList,感觉用起来麻烦,一直都不怎么在意这个属性,汗……
刚刚试了一下,用TList.List[...].属性名 的确可以直接修改记录的属性,用起来还算方便。
RAD10.2下测试通过:
type
  TUser = record
    Name: string;
    Sex:  Boolean;
  end;

//..........
var
  FUsers: TList<TUser>;
//..........

const
  SexStrs: array[Boolean] of string = ('女', '男');
var
  user: TUser;
begin
  FUsers := TList<TUser>.Create;
  user.Name := 'Jack';
  user.Sex  := True;
  FUsers.Add(user);
  user.Name := 'Rose';
  user.Sex  := False;
  FUsers.Add(user);

  FUsers.List[0].Name := 'Jack XXX';
  FUsers.List[1].Sex  := True;

  Memo1.Lines.Add(Format('User=%s, Sex=%s', [FUsers.List[0].Name, SexStrs[FUsers.List[0].Sex]]) );
  Memo1.Lines.Add(Format('User=%s, Sex=%s', [FUsers.List[1].Name, SexStrs[FUsers.List[1].Sex]]) );
end;
----------------------------------------------
-广袤璀璨的银河,永无止境的梦想(梦无止境游银河) 偶的生活博客  偶的技术军事博客
作者:
男 iamdream (银河恒久远,梦想无止境!) ★☆☆☆☆ -
大贡献会员
2018/9/12 19:32:25
10楼: 刚看了下,Delphi2010里的范型TList<T>没有List这个属性。
因此,在Delphi2010中要存记录,又要修改,还是用非范型的TList合适。
----------------------------------------------
-广袤璀璨的银河,永无止境的梦想(梦无止境游银河) 偶的生活博客  偶的技术军事博客
作者:
男 keymark (keymark) ▲△△△△ -
注册会员
2018/9/12 22:54:13
11楼: 语法糖 能让内存碎片更少吗?(编写效率 换 碎片效率)=值?
----------------------------------------------
m3u8播放器:DPlayer/hlsjs-p2p-engine/ckplayer/flashls-dev/sewise-player/http不能播https某些情况下dns服务:coredns/http服务:miniweb/!http://www.lib4dev.com/topics/delphi>http://www.lib4dev.com/topics/pascal?p=34&s=!http://www.lib4dev.com/topics/delphi
作者:
男 wr960204 (武稀松) ★☆☆☆☆ -
盒子活跃会员
2018/9/13 1:41:21
12楼: Delphi的一个问题,就是只有引用参数,而没有独立的引用类型。
C++的泛型返回都是引用,所以可以直接修改而无需来回拷贝。
Delphi语言本身不支持,能想到的办法就是TList<T>泛型T用指针类型。
----------------------------------------------
武稀松http://www.raysoftware.cn
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v2.1 版权所有 页面执行62.5毫秒 RSS