एक हैश पास फ़ाइल है http://gpdelphiunits.googlecode.com /svn-history/r4/trunk/src/GpStringHash.pas

हम हैश बना सकते हैं और कुंजी जोड़ सकते हैं - मूल्य

प्रश्न 1: हम जानना चाहते हैं कि कैसे कुंजी-मूल्य को पुनरावृत्त करना है और डेटा को सूचीदृश्य में कॉपी करना है।

प्रश्न 2: क्या इसे असाइन करने की विधि की तरह तेजी से कॉपी करने का कोई तरीका है?

पहले से ही बहुत - बहुत धन्यवाद।

प्रिय gabr, आपके तत्काल उत्तर और आपकी हैश फ़ाइल के लिए बहुत-बहुत धन्यवाद। क्या आपके कोड के लिए कोई दस्तावेज़ या सहायता फ़ाइलें या उदाहरण या डेमो है? आपको पुनः बहुत बहुत धन्यवाद।


बस परीक्षण करें, मुझे नहीं पता कि मैंने कहां गलत किया, बहुत-बहुत धन्यवाद। मैंने अभी आपके कोड का उपयोग किया है लेकिन निम्न त्रुटि संकेत है। या मैंने कुछ गलतियाँ की हैं:

procedure TForm8.ab;
var
  a: TGpStringHash;
  i,j, fr:integer;
  k: string;
  enlist: TGpStringHashenumerator;
  kv: TGpStringHashKV;
begin
  a:=TGpStringHash.Create;
  kv:=TGpStringHashKV.Create;
  enlist:= TGpStringHashenumerator.Create(a);
  for j:=1 to 10 do begin
    if a.HasKey(inttostr(j)) then begin
      fr:=a.ValueOf(inttostr(j));
      a.Update(inttostr(j),fr+1);
    end
    else begin
      a.Add(inttostr(j),1);
    end;
  end;
  for i:=0 to a.Count -1 do begin
    kv:=enlist.GetCurrent;
    memo1.Lines.Add(kv.Key + inttostr(kv.value) );
  end;
end; /// Division by Zero ERROr ///FindBucket(const key: string): cardinal;

उत्तर: आप एन्यूमरेटर का गलत इस्तेमाल कर रहे हैं। इसे सामने तत्काल न करें और अगले तत्व पर जाने के लिए हमेशा MoveNext का उपयोग करें।

// fill 'a' as above
enlist := TGpStringHashenumerator.Create(a);
while enList.MoveNext do begin
  kv:=enlist.GetCurrent;
  memo1.Lines.Add(kv.Key + inttostr(kv.value) );
end;
1
Dylan 21 अक्टूबर 2010, 13:29
TGpStringHash के पैरामीटर रहित कंस्ट्रक्टर का उपयोग न करें। हैश में तत्वों की कम से कम प्रारंभिक संख्या को बनाने के लिए हमेशा पास करें।
 – 
gabr
21 अक्टूबर 2010, 15:20
या यह अलग डेल्फी संस्करण के कारण है?
 – 
Dylan
21 अक्टूबर 2010, 15:21
हम क्रिएट कंस्ट्रक्टर को इसमें बदलते हैं: a:=TGpStringHash.Create (num, true);//param के साथ। कोई त्रुटि संकेत नहीं है, लेकिन ज्ञापन 1 समान डेटा उत्पन्न करता है: वे सभी '-1' हैं। कृपया हमें बताएं कि कैसे बदलना है।
 – 
Dylan
21 अक्टूबर 2010, 16:03

1 उत्तर

सबसे बढ़िया उत्तर

1) नवीनतम संस्करण का उपयोग करें। यह सभी कंटेनरों के लिए एन्यूमरेटर लागू करता है।

2) नहीं।

संपादित करें:

मैंने अपने आंतरिक GpStringHash परीक्षण ऐप को भंडार में प्रतिबद्ध किया है। यह GpStringHash कक्षाओं का उपयोग करने के तरीके पर एक डेमो के रूप में सर्वर कर सकता है।

TGpStringHash की गणना करने के लिए आप उपयोग करेंगे

var
  hash: TGpStringHash;
  kv: TGpStringHashKV;

for kv in hash do
  // do something with kv.Key and kv.Value

यदि आप एन्यूमरेटर के समर्थन के बिना पुराने डेल्फी का उपयोग कर रहे हैं, तो आप बाहरी कॉलबैक विधि के साथ ForEach विधि का उपयोग कर सकते हैं।

procedure TGpStringHash.ForEach(enumerator: TGpStringHashEnumMethod);
var
  enum: TGpStringHashEnumerator;
begin
  enum := GetEnumerator;
  try
    while enum.MoveNext do
      enumerator(enum.Current);
  finally FreeAndNil(enum); end;
end; { TGpStringHash.ForEach }
1
gabr 21 अक्टूबर 2010, 14:41
प्रिय gabr, आपके तत्काल उत्तर और आपकी हैश फ़ाइल के लिए बहुत-बहुत धन्यवाद। क्या आपके कोड के लिए कोई दस्तावेज़ या सहायता फ़ाइलें या उदाहरण या डेमो है? आपको पुनः बहुत बहुत धन्यवाद।
 – 
Dylan
21 अक्टूबर 2010, 13:50
अद्यतन: उदाहरण/डेमो अब एसवीएन में संग्रहीत है।
 – 
gabr
21 अक्टूबर 2010, 14:41
बहुत - बहुत धन्यवाद। मैंने अभी आपके कोड का उपयोग किया है लेकिन निम्न त्रुटि संकेत है। या मैंने कुछ गलतियाँ की हैं:
 – 
Dylan
21 अक्टूबर 2010, 14:47
प्रक्रिया TForm1.ab; वर मैं, जे, एफआर: पूर्णांक; कश्मीर: स्ट्रिंग; सूचीबद्ध करें: TGpStringHashenumerator; केवी: टीजीपीस्ट्रिंगहाशकव; एक शुरू करें:=TGpStringHash.Create; kv:=TGpStringHashkv.Create; सूचीबद्ध करें: = TGpStringHashenumerator.Create(a); j:=1 से 10 के लिए शुरू करें यदि a.HasKey(inttostr(j)) तो शुरू करें fr:=a.ValueOf(inttostr(j)); ए. अपडेट (inttostr (जे), एफआर + 1); अंत और शुरू a.Add(inttostr(j),1); समाप्त; समाप्त; i:=0 से a.Count -1 के लिए kv:=enlist.GetCurrent शुरू करें; memo1.Lines.Add(kv.Key + inttostr(kv.value)); समाप्त; समाप्त;
 – 
Dylan
21 अक्टूबर 2010, 15:03
शून्य त्रुटि द्वारा विभाजन ///FindBucket(const key: string): कार्डिनल;
 – 
Dylan
21 अक्टूबर 2010, 15:04