怎么判断TStringGrid 某列的相同值次数为3次以上,新手,就解~~
怎么判断TStringGrid 某列的相同值次数为3次以上
比如:TStringGrid1的第一列出现了4个相同值,我该怎么计算出这值,出现了四次,新手,就解~~
[解决办法]
不写代码了,说说方法吧,希望能有帮助。
TStringGrid.Cols 是 TStrings 对象数组,每个成员就是一列,例如,Cols[0] 是第一列,这你懂。如果不排序,搜索 Cols[0] 算法有点复杂,我想你的难点在这里。不妨声明一个 TStringList 对象,例如 SList,然后:
SList.Text := Cols[0].Text; // 赋值
SList.Sort; // 排序
搜索这个排序的 SList 就容易多了,相同字符串会排在一起,算法比较简单。
[解决办法]
n := 0;
for i := 0 to StringGrid1.RowCount - 1 do
if StringGrid1.Cells[0, i] = S then//找第一列等于S的
Inc(n);
if n = 4 then
ShowMessage('4')
else
ShowMessage(IntToStr(n));
[解决办法]
因为这个S的值不固定,所以你还要把S再循环一次,效率很低。
一楼的方法好,排序后,值相同的就排在一起了,这样循环很次只从当前记录开始,遇到不同的,S重新赋值,就再从当前记录开始,把符合条件的输出就可以了。
[解决办法]
feiba7288 的方法如果写完整,代码比较繁琐,很难解读。也许这个方法运行速度快些,但也不好说,很大程度上取决于一列究竟有多长。我想,从易读易维护角度来看,排序方法好些,毕竟不用自己写排序程序。