array[0..9] of TStrings 行不?

解决方案 »

  1.   

    var mystring:array[0..0] of String;
      

  2.   

    type
      TStrArray:array[0..x] of string
    var
      strarray:Tstrarray;
      

  3.   

    var
         i:array[0..10] of String
    begin
    i[0]...
    i[1]...
    ...
    end;
      

  4.   

    var
      str:tlist;TLIST类很灵活的
      

  5.   

    写错了,意思就是链表的数组,array[0..9] of TList 行不?
      

  6.   

    有一个现成的类TStringList应该可以满足你的要求
      

  7.   

    TStringList不行,
    我要的是TStringList的array
      

  8.   

    thanks zws() ,Tlist能做TStrings的数组么
      

  9.   

    用动态数组最方便 LStrings:Array of String;
      

  10.   

    TList只能保存Pointer类型的数据
    你可以把指向TStrings的指针保存到TList中去
      

  11.   

    thanks , to eulb(eulb,//TList只能保存Pointer类型的数据
    //你可以把指向TStrings的指针保存到TList中去您说的应该怎么做
      

  12.   

    thanks , to eulb(eulb,//TList只能保存Pointer类型的数据
    //你可以把指向TStrings的指针保存到TList中去您说的应该怎么做
      

  13.   

    大家好,我自己试了试,基本可以实现duansoft的想法(如果我没理解错的话),但在写代码过程中发现了好多的疑问,希望大家能继续探讨下去。以下是全部代码,已测试通过。unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;type
      TForm1 = class(TForm)
        Button1: TButton;
        Button2: TButton;
        Memo1: TMemo;
        procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
        procedure FormDestroy(Sender: TObject);
      private
        FList: TList;
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementationtype
      PString = ^TStringlist;{$R *.dfm}//建立TList of TStringList,TStringList内容可自行增删
    //这里我偷懒只增加了一个内容
    procedure TForm1.Button1Click(Sender: TObject);
    var
      ApString: PString;
      I: Integer;
    begin
      FList := TList.Create;
      FList.Capacity := 3;
      for I := 0 to 2 do
      begin
        New(ApString);
        ApString^ := TStringlist.Create;
        ApString^.Add(IntToStr(I));                //?1 
        FList.Add(ApString);
      end;
    end;//为验证建立TList of TStringList是否成功
    //若TStringList的Item不止一项,须作相应改变
    procedure TForm1.Button2Click(Sender: TObject);
    var
      I: Integer;
    begin
      Memo1.Lines.Clear;
      for I := 0 to 2 do
      begin
        Memo1.Lines.Add(PString(FList.Items[I]).Strings[0]);
      end;
    end;procedure TForm1.FormDestroy(Sender: TObject);
    var
      I: Integer;
      ApString: PString;
    begin
      for I := 0 to 2 do
      begin
        ApString := FList.Items[I];
        ApString^.Free;                             //?2  
        Dispose(ApString);                          //?3
      end;
      FList.Free;
    end;end.疑问:
    ?1:
      此处若该为ApString.Add(IntToStr(I)),则程序仍正常,谁能给个解释?
      
    ?2:
      同样,此处换成ApString.Free也没用任何问题。?3:
      New 和Dispose在这里还是必需的吗?请指点,谢谢。
      

  14.   

    thanks,
    1,2:可能Delphi最终还是为指针类型,不太清楚,请高人指教
    3.New 和Dispose不一定必需吧,
    我想只要可以分配内在的函数就行,
      

  15.   

    看了《Mastering Delphi6》后,受到启发,写了新代码如下,已测试通过,而且比之上次的代码应该更readable :)
    其中,FList.Add(TStringList.Create)我是这样理解的:因为TStringList.Create返回的是指向类
    TStringList的指针,所以正好符合TList的要求,故可直接添加,而无须类TStringList的实例了。
    有何偏颇还请高人指点,谢谢。unit New;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls;type
      TForm1 = class(TForm)
        Memo1: TMemo;
        btnAdd: TButton;
        btnShow: TButton;
        procedure btnAddClick(Sender: TObject);
        procedure btnShowClick(Sender: TObject);
        procedure FormDestroy(Sender: TObject);
      private
        FList: TList;
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.btnAddClick(Sender: TObject);
    var
      I: Integer;
    begin
      FList := TList.Create;
      for I := 0 to 2 do
      begin
        FList.Add(TStringList.Create);
        //用于观察每次TStringList创建的地址是否相同
        Memo1.Lines.Add(IntToStr(Integer(FList.Items[I])));
        (TObject(FList.Items[I]) as TStringList).Add(IntToStr(I));  //注释1
      end;
    end;procedure TForm1.btnShowClick(Sender: TObject);
    var
      I: Integer;
    begin
      Memo1.Clear;
      for I := 0 to 2 do
        Memo1.Lines.Add((TObject(FList.Items[I]) as TStringList).Strings[0]);
    end;procedure TForm1.FormDestroy(Sender: TObject);
    var
      I: Integer;
    begin
      for I := 0 to 2 do TObject(FList.Items[I]).Free;
      FList.Free;
    end;end.//注释1
      在进行TStringList的typecast以前,必须先对pointer类型的Items[I] 进行TObject的hard-cast,也不能直接用TStringList进行hard-cast。
      至于为什么,我也不知道,请不吝赐教。
      

  16.   

    如果我写...procedure TForm1.btnAddClick(Sender: TObject);
    var
    I: Integer;
    objTmp :TStringList;
    begin
    FList := TList.Create;
    for I := 0 to 2 do
    begin
    objTmp := TStringList.Create;
    FList.Add(objTmp);
    //用于观察每次TStringList创建的地址是否相同
    Memo1.Lines.Add(IntToStr(Integer(objTmp)));
    //objTmp.Add(IntToStr(i));  //
    TStringList(FList.Items[i]).Add(IntToStr(I)); //注释1
    end;
    end;procedure TForm1.btnShowClick(Sender: TObject);
    var
    I: Integer;
    begin
    Memo1.Clear;
    for I := 0 to 2 do
    Memo1.Lines.Add(TStringList(FList.Items[I]).{Text}Strings[0]);
    end;procedure TForm1.FormDestroy(Sender: TObject);
    var
    I: Integer;
    begin
    for I := 0 to 2 do TObject(FList.Items[I]).Free;
    FList.Free;
    end;end.