Depset

किसी समस्या की शिकायत करें सोर्स देखें Nightly · 8.3 · 8.2 · 8.1 · 8.0 · 7.6

एक खास तरह का डेटा स्ट्रक्चर, जो मर्ज करने के बेहतर तरीकों के साथ काम करता है. साथ ही, इसमें ट्रैवर्स करने का तय क्रम होता है. आम तौर पर, इसका इस्तेमाल नियमों और आसपेक्ट में ट्रांज़िशन डेपेंडेंसी से डेटा इकट्ठा करने के लिए किया जाता है. ज़्यादा जानकारी के लिए यहां जाएं.

डिप्सेट के एलिमेंट, हैश किए जा सकने वाले और एक ही टाइप के होने चाहिए (जैसा कि पहले से मौजूद type(x) फ़ंक्शन के मुताबिक तय किया गया है). हालांकि, डिप्सेट सिर्फ़ हैश डिप्सेट नहीं होते और इनमें फ़ास्ट में सदस्यता की जांच करने की सुविधा नहीं होती. अगर आपको सामान्य सेट डेटाटाइप की ज़रूरत है, तो मुख्य Starlark सेट टाइप का इस्तेमाल करें. यह टाइप, Bazel 8.1 से उपलब्ध है. अगर आपकी .bzl फ़ाइल को Bazel के पुराने रिलीज़ के साथ काम करना है, तो किसी डिक्शनरी का इस्तेमाल करके सेट का अनुकरण किया जा सकता है. इसमें सभी कुंजियां True पर मैप होती हैं.

अगर किसी डिप्सेट की पुष्टि की जाती है (यानी, बूलियन कॉन्टेक्स्ट में इस्तेमाल किया जाता है, जैसे कि if d: जहां d एक डिप्सेट है), तो डिप्सेट सिर्फ़ तब True होता है, जब वह खाली न हो. यह जांच O(1) ऑपरेशन है.

डिप्सेट में बदलाव नहीं किया जा सकता. इन्हें उनके कंस्ट्रक्टर फ़ंक्शन का इस्तेमाल करके बनाया जाना चाहिए. साथ ही, transitive आर्ग्युमेंट की मदद से, दूसरे डेपसेट के साथ मर्ज या जोड़ा जाना चाहिए.

order पैरामीटर से यह तय होता है कि डेपसेट को, क्रम से चलने लायक ऑब्जेक्ट में बदलने के लिए किस तरह का ट्रैवर्सल किया जाए. चार वैल्यू हो सकती हैं:

  • "default" (पहले इसे "stable" कहा जाता था): क्रम की जानकारी नहीं दी गई है (लेकिन यह तय है).
  • "postorder" (पहले "compile"): पोस्ट-ऑर्डर को बाएं से दाएं क्रम में लगाने के लिए. यह बार-बार, सबसे बाईं ओर मौजूद सभी चाइल्ड एलिमेंट को फिर सबसे बाईं ओर मौजूद डायरेक्ट एलिमेंट को क्रम से ट्रैवर्स करता है.
  • "preorder" (पहले "naive_link"): बाईं से दाईं ओर प्री-ऑर्डर करने की सुविधा. यह सबसे पहले बाएं से दाएं, डायरेक्ट एलिमेंट को ट्रैवर्स करता है. इसके बाद, सबसे पहले बाएं से दाएं, चाइल्ड एलिमेंट को फिर से ट्रैवर्स करता है.
  • "topological" (पहले इसे "link" कहा जाता था): यह रूट से लेकर पत्तियों तक के क्रम में, टॉपोलॉजिकल क्रम होता है. इस बात की कोई गारंटी नहीं है कि क्रम बाएं से दाएं होगा.

दो डेपसेट को सिर्फ़ तब मर्ज किया जा सकता है, जब दोनों डेपसेट का क्रम एक ही हो या उनमें से किसी एक का क्रम "default" हो. दूसरे मामले में, डेटासेट का क्रम वही रहेगा जो पहले डेटासेट का था.

डेपसेट में डुप्लीकेट वैल्यू हो सकती हैं, लेकिन to_list() का इस्तेमाल करके, डुप्लीकेट वैल्यू को हटा दिया जाएगा. डुप्लीकेट वैल्यू, ऑर्डर के सेमेटिक्स में रुकावट डाल सकती हैं.

सदस्य

to_list

list depset.to_list()

यह फ़ंक्शन, डुप्लीकेट के बिना एलिमेंट की सूची दिखाता है. यह सूची, डिपेंडेंसी सेट के ट्रैवल ऑर्डर में होती है. ध्यान दें कि डिप्सेट में एक से ज़्यादा बार जोड़े गए एलिमेंट के लिए, क्रम तय नहीं किया जाता है. हालांकि, यह तय होता है कि कौनसा एलिमेंट पहले दिखेगा. "default" के क्रम में लगाए गए डेपसेट और उन चाइल्ड डेपसेट के एलिमेंट के लिए भी क्रम तय नहीं किया जाता जिनका क्रम, पैरंट डेपसेट से अलग होता है. यह सूची, डिपेंडेंसी सेट की कॉपी होती है. इसमें बदलाव करने से, डिपेंडेंसी सेट पर कोई असर नहीं पड़ता. इसके अलावा, डिपेंडेंसी सेट में बदलाव करने से, इस सूची पर भी कोई असर नहीं पड़ता.