c# - Validation on hierarchical alike structure -
मान लीजिए कि नीचे डेटाटेबल है:
प्रत्येक पंक्ति इस संयोजन के साथ (एन 1, एन 2, एन 3, एन 4) का एक संयोजन है:
- केवल एन 1, एन 2, एन 3 और एन 4 शून्य हैं
- प्रत्येक पंक्ति स्तंभ में एन (एन) शून्य हो सकता है अगर N (n-1) नल हो। (पदानुक्रमित संरचना )।
- (N1, N2, N3, N4) के प्रत्येक संयोजन पूरे सेट के भीतर अद्वितीय है।
मैं एक समाधान की तलाश कर रहा हूं जिसके द्वारा पूरे सेट के लिए, "किसी भी संयोजन के उस मूल्य के कॉलम में कोई मूल्य नहीं होना चाहिए जो उसके उप संयोजनों के योग से कम है" ;.
उदाहरण के लिए पंक्ति की राशि: 1 पंक्तियों की राशि से अधिक होना चाहिए: 2,10,11 और परिणामस्वरूप पंक्ति की राशि: 2 पंक्तियों की राशि से अधिक होनी चाहिए: 3,4,5,6, 7,8,9 (दिए गए मामले में दिया जाने वाला कोर्स मान्य नहीं है)।
मेरा विकास वातावरण सी # .net है और लिनक का उपयोग करना पसंद है।
पहले से धन्यवाद
P>
आप एक विधि को एक साथ खींच सकते हैं जो दो Tuple & lt; N1, N2 के लिए माता-पिता के रिश्ते का फैसला करता है , एन 3, एन 4 & gt;
जैसी वस्तुएं आइडिया: बिट सरणी प्रतिनिधित्व और पाली इस सरल मॉडल के साथ:
सार्वजनिक वर्ग बजट {सार्वजनिक इन्ट आईडी (प्राप्त); सेट; } // सार्वजनिक Int N1 {get; सेट; } सार्वजनिक नल योग्य & lt; int & gt; N2 {प्राप्त करें; सेट; } सार्वजनिक नल योग्य & lt; int & gt; एन 3 {प्राप्त करें; सेट; } सार्वजनिक नल योग्य & lt; int & gt; एन 4 {प्राप्त करें; सेट; } // सार्वजनिक फ्लोट राशि {प्राप्त करें; सेट; } /// & lt; सारांश & gt; /// विधि विश्लेषण करती है कि यदि वर्तमान ऑब्जेक्ट & lt; param नाव = "अन्य" / & gt; /// यदि आप GetHashCode ओवरराइड करते हैं या निफ्टी बिट सरणी प्रस्तुति प्रदान करते हैं /// आप वास्तव में तेजी से बिट स्थानांतरण के साथ माता-पिता के रिश्ते को अनुमान कर सकते हैं /// & lt; / summary & gt; /// & lt; परम नाम = "अन्य" & gt; बजट & lt; / param & gt; के साथ तुलना करने के लिए; सार्वजनिक बूल आईएसपीएनेएफ़ (बजट अन्य) {// बहुत समय-उपभोक्ता के लिए छोड़ दिया जाता है और 'आपका काम स्पष्ट रूप से' / / या 'नहीं-उद्देश्य-के-इस साइट' के कारण सत्य वापस आते हैं; आप हर बजट प्रविष्टि के लिए सब कॉम्बिनेशन (आपका वर्गीकरण) प्राप्त करने का प्रयास कर सकते हैं: बजट b1 = नया बजट () {N1 = 1, N2 = शून्य, N3 = शून्य, N4 = शून्य, राशि = 1200f}; बजट बी 11 = नया बजट () {एन 1 = 1, एन 2 = 1, एन 3 = शून्य, एन 4 = शून्य, राशि = 800 एफ}; बजट बी 111 = नया बजट () {एन 1 = 1, एन 2 = 1, एन 3 = 1, एन 4 = शून्य, राशि = 800 एफ}; डीबग। एसेट (बी 1। आईपीएआरपर (बी 11)); Debug.Assert (b1.IsParentOf (b111)); Debug.Assert (b11.IsParentOf (b111)); Var बजटएन्ट्रीज़ = नई सूची & lt; बजट & gt; () {b11, b111}; Var subCombinations = budgetEntries.Where (हो = & gt; b1.IsParentOf (हो)); डिबग। एसेट (बी 1। एमाउंट & gt; सबकम्बैमिशन। सैम (स्क = & gt; स्क। एमाउंट));
निश्चित रूप से बजट प्रविष्टियों के पूरे डाटासेट के लिए आपको कार्टेसीयन उत्पाद जैसे अन्य सभी लोगों के खिलाफ हर प्रविष्टि का मिलान करना होगा। मैं यह दावा नहीं करता कि यह तेज़ है, लेकिन निश्चित रूप से यह काम करना चाहिए।
Comments
Post a Comment