2015-11-04 9 views
11

क्या डेल्फी में हैशसेट है?क्या डेल्फी में हैशसेट है?

मुझे पता है कि सेट का उपयोग करना सबसे अधिक 255 आइटम हो सकता है। क्या नवीनतम डेल्फी कंपाइलर में हैशसेट है उदा। एक्सई 8, सिएटल

+1

AFAIK डेल्फी में हैशसेट कार्यान्वयन शामिल नहीं है लेकिन आप [स्प्रिंग 4 डी] (https://bitbucket.org/sglienke/spring4d) प्रोजेक्ट को आजमा सकते हैं जिसमें 'थैशसेट' – RRUZ

उत्तर

10

मानक संग्रह एक सामान्य सेट क्लास प्रदान नहीं करते हैं। तृतीय पक्ष संग्रह पुस्तकालय जैसे Spring4D करते हैं।

आप TDictionary<K, V> के शीर्ष पर आसानी से एक सामान्य सेट क्लास बना सकते हैं। एक नंगे हड्डियों संस्करण इस प्रकार दिखाई देंगे:

type 
    TSet<T> = class 
    private 
    FDict: TDictionary<T, Integer>; 
    public 
    constructor Create; 
    destructor Destroy; override; 
    function Contains(const Value: T): Boolean; 
    procedure Include(const Value: T); 
    procedure Exclude(const Value: T); 
    end; 

.... 

constructor TSet<T>.Create; 
begin 
    inherited; 
    FDict := TDictionary<T, Integer>.Create; 
end; 

destructor TSet<T>.Destroy; 
begin 
    FDict.Free; 
    inherited; 
end; 

function TSet<T>.Contains(const Value: T): Boolean; 
begin 
    Result := FDict.ContainsKey(Value); 
end; 

procedure TSet<T>.Include(const Value: T); 
begin 
    FDict.AddOrSetValue(Value, 0); 
end; 

procedure TSet<T>.Exclude(const Value: T); 
begin 
    FDict.Remove(Value); 
end; 

मैं तो आप किसी भी गलतियों मैंने बनाया समाधान करना पड़ सकता इस कोड को संकलित नहीं किया है,। आप इसे अधिक सक्षम होने के लिए विस्तारित करना चाहते हैं। लेकिन उम्मीद है कि यह आपको दिखाएगा कि कैसे शुरू किया जाए।

1

आप इसके लिए TDictionary का उपयोग कर सकते हैं। जिस चीज को आप ट्रैक करना चाहते हैं, उसके लिए TKey टाइप पैरामीटर को परिभाषित करें। TValue टाइप पैरामीटर कुछ भी हो सकता है; आप इसका इस्तेमाल नहीं करेंगे। (पर्ल भी एक सेट प्रकार का अभाव है, और इसलिए सम्मेलन में एक ही तरीके मैं यहाँ का सुझाव दे रहा हूँ में अपनी हैश प्रकार का उपयोग करने के लिए है।)

कॉल ContainsKey सदस्यता की जाँच करने के। डालने के लिए Add या AddOrSetValue का उपयोग करें; हटाने के लिए Remove

यह एक रैपर लिखने के लिए एक छोटा अभ्यास होगा जो अप्रयुक्त TValue पैरामीटर को छुपाता है।

संबंधित मुद्दे