2008-11-01 24 views
8

मैं एक प्रोग्राम बना रहा हूं जो उपयोगकर्ता निर्देशिका बनाता है (विंडोज़ में नहीं, मेरे ऐप में) और इन फ़ोल्डर्स में उपफोल्डर्स हैं और इसी तरह; प्रत्येक फ़ोल्डर में फ़ोल्डर या दस्तावेज़ होना चाहिए। उपयोग करने के लिए सबसे अच्छी डेटा संरचना क्या है? ध्यान दें कि उपयोगकर्ता एक उपफोल्डर का चयन कर सकता है और इसमें और उसके सबफ़ोल्डर में दस्तावेज़ों की खोज कर सकता है। और मैं फ़ोल्डर्स या उपफोल्डर स्तर को सीमित नहीं करना चाहता हूं।निर्देशिका संरचना के लिए उपयोग की जाने वाली डेटा संरचना?

+0

विनिर्देश से परखने के बाद, एक फ़ोल्डर फ़ोल्डर और दस्तावेजों का एक मिश्रण शामिल नहीं हो सकता? और आपके पास खाली सबफ़ोल्डर नहीं हो सकते हैं? कृपया सटीक रहें। –

+0

असल में, एक हिस्सा कहता है कि फ़ोल्डर में मिश्रण नहीं हो सकता है; एक और हिस्सा बताता है कि वे कर सकते हैं। –

उत्तर

11

यह मैं क्या कर रहा है: आईडी और ParentID:

डेटाबेस में हर रिकॉर्ड दो क्षेत्रों है। आईडी 4-5 वर्ण हैं (बेस 36, ए-जेड: 0-9 या कुछ समान)। जनक आईडी माता पिता की पूरी संरचना का एक संयोजन कर रहे हैं ...

तो ...

यह संरचना:

ID  ParentID  Name 

0000 NULL   ROOT 
0001 0000   Folder1 
0002 0000   Folder2 
0003 00000002  Folder3 
0004 0000   Folder4 
0005 00000004  Folder5 
0006 000000040005 Folder6 

मुझे पसंद है:

Root 
    Folder1 
    Folder2 
     Folder3 
    Folder4 
     Folder5 
     Folder6 

इस तरह दर्शाया जा सकते हैं यह संरचना क्योंकि अगर मुझे किसी फ़ोल्डर के नीचे सभी फाइलें खोजने की ज़रूरत है तो मैं एक प्रश्न कर सकता हूं जैसे:

SELECT * FROM Folders WHERE ParentID LIKE '0000%' -- to find all folders under Folder1 

एक फ़ोल्डर और उसकी सभी बच्चों हटाने के लिए:

DELETE FROM Folders WHERE ID='0004' AND ParentID LIKE '00000004%' 

एक फ़ोल्डर और उसकी बच्चों को ले जाने के लिए, आप सभी रिकॉर्ड है कि एक ही माता पिता का उपयोग करें, नए माता-पिता को अपडेट करना होगा।

और मैं फ़ोल्डर या सबफ़ोल्डर स्तरों

यह करने के लिए एक स्पष्ट सीमा यह है कि उप-फ़ोल्डरों की संख्या अपने ParentID मैदान के आकार तक सीमित हैं है linit नहीं करना चाहती।

+0

यदि मैं प्रत्येक फ़ोल्डर/दस्तावेज़ों के लिए फ़ील्ड "आकार" जोड़ता हूं, तो सभी माता-पिता के लिए आकार कैसे अपडेट करें? – tuananh

8

मैं कुछ तरीके आप इस संरचना सकता है के बारे में सोच सकते हैं, लेकिन कुछ भी नहीं स्पष्ट हरा होगा:

वास्तविक फाइल सिस्टम का प्रयोग करें।

+0

नीचे संशोधित, लेकिन वास्तव में, यह केवल एकमात्र जवाब है! –

+0

क्यों? फ्लीपेंट के रूप में आने का इरादा नहीं है, मेरा सवाल ईमानदार है। – iokevins

+3

क्या होगा यदि कोई स्मृति में स्नैपशॉट रखना चाहता है ताकि आईओ न्यूनतम और केवल लिखने के लिए हो। फिर क्या ? ... वास्तविक फ़ाइल सिस्टम का उपयोग उच्च प्रदर्शन प्रणाली के लिए एक विकल्प नहीं है। –

5

मैं की tree data structure

+0

आपका नाम आपकी टिप्पणियों पर प्रकट होता है। आपको उन पर हस्ताक्षर करने की आवश्यकता नहीं है। – bzlm

+0

@bzlm: बिलकुल सही। मैं बस इतना वापस उपयोग कर रहा था :-) – Cameron

0

मुझे पता है कि प्रश्न विशेष रूप से एक डेटा संरचना के लिए पूछ रहा है किसी प्रकार का लेकिन ... का उपयोग कर इस पर गौर करेंगे

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

0

अधिकांश ओओ भाषा फाइल सिस्टम के लिए कुछ प्रकार के अमूर्तता के साथ आती है, इसलिए वहां मैं शुरू करूंगा। फिर यदि आपको आवश्यकता हो तो इसे उप-वर्गीकृत करें।

मैं निर्देशिकाओं की एक सरणी के रूप में निर्देशिका की अपेक्षा करता हूं जो निर्देशिका या फाइलें हैं, उदाहरण के लिए।

0

आप मीटर तरह से पेड़ डेटा संरचना

+0

यह एक टिप्पणी होना चाहिए। –

1

उपयोग कर सकते हैं मेरा सुझाव है चाहिए बी + ट्री .... आप आसानी से अनुक्रमण (पेज, फोल्डर आदि) और सभी का उपयोग कर सकते हैं।

B+ Tree http://commons.wikimedia.org/wiki/File:Btree.png

अधिक जानकारी के लिए

: http://ozark.hendrix.edu/~burch/cs/340/reading/btree/index.html

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