משיב מוביל
Develop a simple decision tree - WF or Simple If-Else statement

שאלה
-
Hey,
I have a decision tree that i need to turn to a code in C#
The simple way of doing it is using if-else statements but in this solution i will need to create 4-5 nested conditions.
I am looking for a better way to do it and so far i read a little bit about rule engines.
Do you have something else to suggest for an efficient way to develop decision tree with 4-5 nested conditions?
Thanks.
masodi
תשובות
-
שלום
ראה כאן:
http://www.codeproject.com/KB/recipes/id3.aspx
עוד מקורות:
בהצלחה, ואם עזרתי, לחץ על 'סמן כתשובה', וסמן את התשובה כמועילה.- הוצע כתשובה על-ידי Meir Pinto יום שלישי 18 ינואר 2011 06:52
- סומן כתשובה על-ידי Meir Pinto יום ראשון 23 ינואר 2011 05:57
-
אחד מהתבניות היותר ישנות זה להשתמש במילון של delegates ולהגדיר את התנאי כמפתח במילון הזה. לדוגמא נניח שאני רוצה לבצע קוד מסויים כאשר הערך של x גדול מ 20 ושל y קטן מ חמש, אבל קוד אחר כאשר הערך של x הוא קטן שווה ל 20 ו y גדול שווה ל 5.וכן במצבים נוספים. אני מדגים כאן רק שני משתני מצב אבל כמובן שניתן להגדיר יותר. מה שאני אעשה זה אגדיר שני משתנים בוליאנים, אחד לכל תנאי ומהם אני אצור מילה בינארית אשר תשמש אותי כמפתח למילון.
דוגמא:
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication8 { class Program { static void Main(string[] args) { var functions = new Dictionary<Tuple<bool, bool>, Action>() { {new Tuple<bool, bool>(false, false), () => Console.WriteLine("A")}, {new Tuple<bool, bool>(false, true), () => Console.WriteLine("B")}, {new Tuple<bool, bool>(true, false), () => Console.WriteLine("C")}, {new Tuple<bool, bool>(true, true), () => Console.WriteLine("D")}, }; int x = 5; int y = 20; bool a = x > 20; bool b = y < 5; Action func; if (functions.TryGetValue(new Tuple<bool, bool>(a, b), out func)) { func(); } } } }
אלון.
- הוצע כתשובה על-ידי ipdd יום שישי 21 ינואר 2011 12:04
- סומן כתשובה על-ידי Meir Pinto יום ראשון 23 ינואר 2011 05:57
כל התגובות
-
שלום
ראה כאן:
http://www.codeproject.com/KB/recipes/id3.aspx
עוד מקורות:
בהצלחה, ואם עזרתי, לחץ על 'סמן כתשובה', וסמן את התשובה כמועילה.- הוצע כתשובה על-ידי Meir Pinto יום שלישי 18 ינואר 2011 06:52
- סומן כתשובה על-ידי Meir Pinto יום ראשון 23 ינואר 2011 05:57
-
אחד מהתבניות היותר ישנות זה להשתמש במילון של delegates ולהגדיר את התנאי כמפתח במילון הזה. לדוגמא נניח שאני רוצה לבצע קוד מסויים כאשר הערך של x גדול מ 20 ושל y קטן מ חמש, אבל קוד אחר כאשר הערך של x הוא קטן שווה ל 20 ו y גדול שווה ל 5.וכן במצבים נוספים. אני מדגים כאן רק שני משתני מצב אבל כמובן שניתן להגדיר יותר. מה שאני אעשה זה אגדיר שני משתנים בוליאנים, אחד לכל תנאי ומהם אני אצור מילה בינארית אשר תשמש אותי כמפתח למילון.
דוגמא:
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication8 { class Program { static void Main(string[] args) { var functions = new Dictionary<Tuple<bool, bool>, Action>() { {new Tuple<bool, bool>(false, false), () => Console.WriteLine("A")}, {new Tuple<bool, bool>(false, true), () => Console.WriteLine("B")}, {new Tuple<bool, bool>(true, false), () => Console.WriteLine("C")}, {new Tuple<bool, bool>(true, true), () => Console.WriteLine("D")}, }; int x = 5; int y = 20; bool a = x > 20; bool b = y < 5; Action func; if (functions.TryGetValue(new Tuple<bool, bool>(a, b), out func)) { func(); } } } }
אלון.
- הוצע כתשובה על-ידי ipdd יום שישי 21 ינואר 2011 12:04
- סומן כתשובה על-ידי Meir Pinto יום ראשון 23 ינואר 2011 05:57
-
היי,
אשמח אם תוכל/י לעדכן אותנו בסטטוס השאלה שלך.
במידה וקיבלת תשובה מתאימה לשאלתך, יש לסמן את התשובה המתאימה ע"י לחיצה על "סמן כתשובה" ליד סימון ה V הירוק
אם לא קיבלת תשובה, מומלץ לספק פרטים נוספים אודות הבעיה, פרטי לוג, צילומי מסך וכו'
אם תגובתי פתרה את בעייתך - לחץ/י, על "סמן כתשובה" ליד סימן ה V הירוק.
מיקרוסופט מציעה שירות זה ללא תשלום, למטרת סיוע למשתמשים, העשרת הידע הקשור בטכנולוגיות ובמוצרים של Microsoft. תוכן זה מתפרסם "כמות שהוא", הוא אינו מעיד על כל אחריות מצד מיקרוסופט.