문제

표준을 사용하는 것의 차이점은 무엇입니까

type 
  sl: TStringList 

일반 TList를 사용하는 것과 비교

type 
  sl: TList<string>

?

내가 볼 수 있는 한, 둘 다 정확히 동일하게 작동합니다.

똑같은 일을 하는 또 다른 방법일까요?

하나가 다른 것보다 나은 상황이 있습니까?

감사해요!

도움이 되었습니까?

해결책

  • TStringlist는 TSTRINGS의 후손입니다.
  • TStringlist는 알파벳순으로 정렬하는 방법을 알고 있습니다.
  • tstringlist에는 객체 속성이 있습니다.
  • TStringList는 모든 이전 버전의 Delphi와 코드를 호환 할 수 없게 만들지 않습니다.
  • TStringlist는 게시 된 속성으로 사용할 수 있습니다. (버그는 현재 일반 클래스가 게시되는 것을 방지합니다.)

다른 팁

TStringlist는 제네릭이 주변에 있기 전에 델파이에서 오랜 시간이 걸렸습니다. 따라서 일반적인 문자열 목록에없는 소수의 유용한 기능을 구축했습니다.

제네릭 버전은 문자열 유형에서 작동하는 tlist와 동일한 새로운 유형을 만드는 것입니다. (.add (), .insert (), .remove (), .clear () 등)

TStringList에는 기본 TLIST 유형 메소드 및 기타 메소드가 있습니다.

거꾸로 호환성을 원한다면 TStringlist는 확실히 갈 길입니다.
문자열 목록으로 작업하기위한 향상된 기능을 원한다면 TStringList가 갈 길입니다. 모든 유형 목록으로 작업하려는 기본 코딩 기초가 있으면 TStringlist를 멀리해야 할 수도 있습니다.

  • TSTRINGLIST는 TSTRINGS의 후손이므로 TMEMO의 라인 특성, TLISTBOX 및 TCOMBOBOX의 항목 및 기타 VCL 구성 요소와 호환됩니다. cblist.items를 사용할 수 있습니다 : = StringList; // 내부적으로 tstrings.assign을 호출합니다

거꾸로 호환성을 원한다면 tstringlist를 사용하고 있으며, 앞으로 호환성을 원한다면 (아마도 문자열 목록을 미래에 int64의 목록으로 변경하는 옵션) TLIST로 이동하십시오.

메모리 관점에서 TStringlist 메모리 사용량은 각 항목에 추가 된 Tobject 포인터의 크기에 따라 증가합니다. TLIST 메모리 사용량은 각 항목에 추가 된 포인터 크기에 따라 증가합니다. 필요한 경우 검색, 교체, 정렬 또는 연관성 작업이 필요하지 않으면 동적 배열 (스트링 배열)이 충분해야합니다. 이것은 tstringlist 또는 tlist의 좋은 메모리 관리가 부족하지만 이론적으로는 메모리를 덜 사용해야합니다.

TSTRINGLIST는 매우 다재다능한 클래스의 델파이입니다. 나는 객체 속성을 여러 번 사용했습니다 (그리고 학대 ;-)). 구분 된 문자열을 TMEMO 및 유사한 컨트롤로 빠르게 번역하는 것은 매우 흥미 롭습니다 (tlistbox, tcombobox, 몇 가지를 나열하기 만하면).

tstringlist는 포인터를 치료할 필요없이 (tlist가 포인터 값의 목록이기 때문에) TLIST를 좋아하지 않습니다.

편집 : tlist (포인터 목록)를 tlist (일반 문자열 목록)와 혼동했습니다. 그 죄송합니다. 내 요점 스탠드 : TStringlist는 간단한 문자열 목록 이상입니다.

과거에 TStringlist가 남용되었다는 대부분의 목적으로, TobjectDictionary는 더 좋습니다. 더 빠르고 정렬이 필요하지 않습니다.

TSTRINGS 객체가 필요한 경우 (일반적으로 UI 물건의 경우 VCL은 XE5에도 제네릭을 많이 사용하지 않기 때문에) TSTRINGLIST를 사용하십시오. TOBJECT에서 필요한 캐스팅은 성가 시지만 Showstopper는 아닙니다.

TStringList는 너무 오랫동안 사용되어 왔으며 Rob Kennedy가 언급한 많은 장점을 가지고 있습니다.

문자열과 객체의 쌍으로 사용하는 유일한 단점은 객체를 이 목록에 예상되고 저장된 실제 유형으로 캐스팅해야 한다는 것입니다(읽을 때). 내가 아는 한 Embarcadero는 Delphi 2009 이상을 제공하지 않았습니다. TStringList의 일반 버전이 포함된 VCL 라이브러리.

이 제한을 극복하기 위해 나는 내부용으로 이러한 목록을 구현했으며 거의 ​​3년 동안 그 목적을 달성했기 때문에 오늘 공유하기로 결정했습니다. https://github.com/t00/deltoo#tgenericstringlist

한 가지 중요한 참고 사항 - 대부분의 경우 객체가 목록에 저장될 때 가장 많이 액세스되는 속성이기도 하므로 기본 속성을 문자열에서 객체로 변경합니다.

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