문제

나는 사용 중입니다 JVMEMORYDATA jvdbultimgrid를 채우기 위해. 나는 주로이 jvmemoryData를 데이터 구조로 사용하고 있습니다. 왜냐하면 나는 내 요구를 충족시키는 다른 것을 모르기 때문입니다.

나는 많은 데이터로 작업하지는 않지만 JVMemoryData에 추가하는 레코드를 열거하는 방법이 필요합니다. 전에 이것을 한 사람이 있습니까? TSQLQuery를 사용 하여이 데이터를 "쿼리"할 수 있습니까?

아니면 더 좋은 방법이 있습니까? 데이터 구조와 관련하여 약간 순진하므로 누군가가 올바른 방향으로 나를 가리킬 수 있습니다. 내가 정말로 필요한 것은 사전/해시와 같으며, 이는 1 개의 키와 많은 값을 허용합니다. 그렇게 :

KEY1: val1;val2;val3;val4;val5;etc...
KEY2: val1;val2;val3;val4;val5;etc...

나는 사용을 고려했다 Thashedstringlist inifiles 장치에서는 여전히 1 개의 키만 값과 연관 될 수 있다는 점에서 동일한 문제로 인해 여전히 고통 받고 있습니다.

도움이 되었습니까?

해결책

한 가지 방법은 tstringlist를 만들고 각 항목의 객체가 모든 값을 포함하는 다른 tlist (또는 tstringlist)를 가리키는 것입니다. 최상위 문자열 목록이 정렬되면 검색은 이진 검색 일뿐입니다.

최상위 목록에 항목을 추가하려면 다음과 같은 것을 사용하십시오 (slist = tstringlist).

Id := SList.AddObject( Key1, tStringList.Create );
InnerList := tStringList(SList.Objects[id]);
// for each child in list
  InnerList.add( value );

목록을 처리 할 시간이되면 각 내부 목록도 자유롭게 해줍니다.

for i := 0 to SList.count-1 do
  begin
    if Assigned(SList.Objects[i]) then
      SList.Objects[i].free;
    SList.Objects[i] := nil;
  end;
FreeAndNil(SList);

다른 팁

나는 델파이 프로그래머가 아니지만 각 해시 항목의 값으로 목록이나 배열을 사용할 수 없습니까? 자바 용어로 :

Map<String,List>

당신은 이미 제다이를 사용하는 것 같습니다. 제다이에는 무엇이든 매핑 할 수있는 수업이 포함되어 있습니다.

이것을 살펴보십시오 관련 질문.

TSTRINGLIST 또는 THASHEDSTRINGLIST와 함께 캐시로 임의로 복잡한 사용자 정의 레코드 유형의 배열을 사용하고 있습니다. 키를 사용하여 각 레코드에 액세스합니다. 먼저 일치에 대한 문자열 목록을 확인합니다. 일치하지 않으면 데이터베이스에서 레코드를 얻고 배열에 넣습니다. 배열 인덱스를 문자열 목록에 넣었습니다. 내가 협력하고있는 레코드를 사용하여 내 코드는 다음과 같습니다.

function TEmployeeCache.Read(sCode: String): TEmployeeData;
var iRecNo: Integer;
    oEmployee: TEmployee;
begin
  iRecNo := CInt(CodeList.Values[sCode]);
  if iRecNo = 0 then begin
    iRecNo := FNextRec;
    inc(FNextRec);
    if FNextRec > High(Cache)  then SetLength(Cache, FNextRec * 2);
    oEmployee := TEmployee.Create;
    oEmployee.Read(sCode);
    Cache[iRecNo] := oEmployee.Data;
    oEmployee.Free;
    KeyList.Add(Format('%s=%s', [CStr(Cache[iRecNo].hKey), IntToStr(iRecNo)]));
    CodeList.Add(Format('%s=%s', [sCode, IntToStr(iRecNo)]));
  end;
  Result := Cache[iRecNo];
end;

나는 이런 식으로 즉각적인 접근을하고있다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top