AFAIK沒有內置的功能。在網上搜索我發現這function它適用於我,但我不喜歡它,因爲它是組裝,我不明白它在做什麼。所以我寫了這個功能也可以工作:如何獲取任何類型集變量的元素數量?
function Cardinality(const PSet: PByteArray;
const SizeOfSet(*in bytes*): Integer): Integer;
const
Masks: array[0..7] of Byte = (1, 2, 4, 8, 16, 32, 64, 128);
var
I, J: Integer;
begin
Result := 0;
for I := 0 to SizeOfSet - 1 do
for J := 0 to 7 do
if (PSet^[I] and Masks[J]) > 0 then
Inc(Result);
end;
現在,我想知道如果我能靠這個功能呢?或者也許設置數據類型背後有一個竅門,這就是爲什麼delphi沒有內置方法的原因。
但if
我的功能是可靠then
我怎麼能就提高:
- 通行證常量它
- 做一個類型檢查,並確保一組被傳遞給函數
- 通行證該值,而不是它的地址
- 擺脫
SizeOfSet
參數
我想稱之爲Cardinality(AnySet)
而不是Cardinality(@AnySet, SizeOf(TAnySet))
。
順便說一句,我需要在XE和XE5中編譯這個。
謝謝,但XE並不編譯:** E2506在接口部分聲明的參數化類型的方法不能使用本地符號'GetCardinality'**。所以我必須將'GetCardinality'定義爲類函數。同樣的問題關於'面具'。這些更改後,它運行並正常工作。 – saastn
是的,這是舊編譯器中的編譯器缺陷。如果需要,可以手動內聯該功能。無論如何,這個概念是完美的。 –