我有一百个EDIT,要求按下一个按钮判断这一百EDIT的值是唯一的,如果有相同的则showmessage('数据重复');,请教一简单的算法;最好循环不要过大。

解决方案 »

  1.   

    for i:=0 to 100 do
    begin
      for j:= i + 1 to 100 do
      begin
      end;
    end;
      

  2.   

    为什么不在edit输入的时候就判断
    声明一个stringlist,按 edit值=edit序号  的格式存放输入的值
    完成一个edit的输入之后判断,如果 values[输入的edit值]<>''那么就是已经有edit有这个值了,那么就提示重复。如果没有重复,则添加 values[edit值]=edit序号这样循环的部分就被控件自己处理了
      

  3.   

    不用循环可以这样
    B := True;
    if Edit1.Text = Edit2.Text then B := False;
    if Edit1.Text = Edit3.Text then B := False;
    if Edit1.Text = Edit4.Text then B := False;
    .....省略若干语句
    if Edit1.Text = Edit100.Text then B := False;if Edit2.Text = Edit3.Text then B := False;
    if Edit2.Text = Edit4.Text then B := False;
    if Edit2.Text = Edit5.Text then B := False;
    .....省略若干语句
    if Edit2.Text = Edit100.Text then B := False;.....省略跟多的若干语句
      

  4.   

    先建成一个堆栈,将所有的Edit值放入,排序,当某个Edit值变化时可在堆中用二分法查找相同值,......
      

  5.   

    首先须解决这100个EDIT是怎么定义的问题。应该用控件数组定义这100个EDIT,才谈得上自动判断。
    当某个EDIT被改动时,可以触发一个changed事件,事件处理的入口将带有该EDIT的序号。将该序号下的edit数组的值和其他99个进行比较,如果有相同则发出警告。//以下为伪码
    //假设 Id 为被触发的edit序号,edit1为控件数组
    for i:=1 to 100 do
    begin 
      if (Id<>i) and (edit1(Id).text=edit1(i).text) then 警告;
    end;
      

  6.   

    哈哈哈哈建一个表edit_table,字段为id(edit的序号),edit_value(edit的值)
    把100个edit 的值存到表中当edit修改一次 ,就根据id(edit的序号)修改一次edit_value(edit的值)然后利用SQL语句:Select distinct edit_value from edit_table 得到查询结果
    然后看RecordCount的值,若小于100 则说明重复,若等于100 则说明没有重复,若大于100 则说明你的表的内容搞错了!^_^,这样就没有循环了。