मुझे अक्सर पदानुक्रमित वस्तुओं के पेड़ों को पार करने और रास्ते में प्रत्येक आइटम पर संचालन करने की आवश्यकता होती है। क्या सूची समझ में स्थानीय स्तर पर इस प्रकार के ऑपरेशन के लिए आम तौर पर स्वीकार्य नाम है? मैं पूछता हूं क्योंकि मुझे पहले पाइथन के zip function के बारे में पहले सीखना याद है, इससे पहले कि यह नेट फ्रेमवर्क में बराबर था और सोच रहा था कि इसका असामान्य लेकिन उचित नाम था।क्या इस प्रकार के गणितीय ऑपरेशन के लिए एक स्वीकार्य नाम है?
यहां कुछ सामान्यीकृत विधियां हैं जो वृक्ष संरचनाओं को ऊपर और नीचे की मरम्मत करती हैं और प्रत्येक आइटम को उनके सामने आने वाली उपज देती हैं।
public static IEnumerable<T> Ancestors<T>(T source, Func<T, T> selector)
{
do
{
yield return source;
source = selector(source);
} while (!Equals(source, default(T)));
}
public static IEnumerable<T> Descendents<T>(T source,
Func<T, IEnumerable<T>> selector)
{
var stack = new Stack<T>();
stack.Push(source);
while (stack.Count > 0)
{
source = stack.Pop();
yield return source;
var items = selector(source);
if (items != null)
{
foreach (var item in items)
{
stack.Push(item);
}
}
}
}
कुछ प्रकार के फ़िल्टर किए गए पेड़ ट्रैवर्सल? मुझे नहीं पता कि इसका कोई विशेष नाम है या नहीं। मुझे नहीं लगता कि यह है। –
दूसरा वाला गहराई-पहली खोज कर रहा है। सुनिश्चित नहीं है कि दूसरे के पास एक नाम है, हालांकि इसे चयनकर्ता फ़ंक्शन के आधार पर 'पूर्वजों' कहा जाता है, लेकिन वास्तव में इसे 'पैरेंट' का पालन करने की आवश्यकता नहीं है (उदाहरण के लिए यह कुछ भी कर सकता है, उदाहरण के लिए 'सर्वश्रेष्ठ' बच्चा चुनें नोड) –
@ जॉर्ज: बिल्कुल, 'पूर्वजों' का एक निश्चित प्रकार का पदानुक्रम संबंध है। हकीकत में यह किसी भी दिशा में एक दोगुनी लिंक्ड सूची को पार करने या किसी भी प्रकार के मनमानी निशान का पालन करने के लिए आसानी से उपयोग किया जा सकता है। –