JVMemoryData를 어떻게 열거합니까?
-
03-07-2019 - |
문제
나는 사용 중입니다 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;
나는 이런 식으로 즉각적인 접근을하고있다.
잭