首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

如何判断TStringGrid 某列的相同值次数为3次以下,新手,就解~

2013-03-14 
怎么判断TStringGrid 某列的相同值次数为3次以上,新手,就解~~怎么判断TStringGrid 某列的相同值次数为3次

怎么判断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));
[解决办法]

引用:
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 的方法如果写完整,代码比较繁琐,很难解读。也许这个方法运行速度快些,但也不好说,很大程度上取决于一列究竟有多长。我想,从易读易维护角度来看,排序方法好些,毕竟不用自己写排序程序。

热点排行