表驅動的認識以及用法——原創---非抄書
阿新 • • 發佈:2018-01-13
mon 內存 三種 所在 [] code 二維 區域 可能 表驅動是什麽:通過查找數據表來代替復雜的邏輯結構(如 if ... else ......, switch等);
表驅動的優點是: 1、 將編程的重心調整到解決問題上,而不是復雜的邏輯判斷;
2、 增加了程序的靈活性,易添加,易修改;
3、數據驅動,如果將數據寫入文件,每次啟動時,從文件中讀取,那麽,如果要修改一些變量,可能直接修改數據文件,而不是去修改程序結構;
表驅動的三種方法:
1、直接驅動法: 你需要找什麽,指定索引,就可以給你立即返回索引在表中對應的元素 或者動作;
案例1:(一維查找:即可以代替一層的if結構或者switch結構): 比如你要查找1--12月份每個月的天數,如下: month_day[12] = {31,30,29,30,30,31,31,31,30,30,31,30}; return month_day[5]; 這樣直接對應的就是5月的天數; 直接驅動 是 指 索引 和 需要的得到的數據 或者動作是直接對應關系; 案例2:(三維查找:即有三個條件同時限制,如果使用if 或者 switch 可能需要三層嵌套結構) 比如一個路由景點,收費標準因 性別,是否學生,以及是否殘疾 三項 共同決定門票的價格,那麽,我們可以 使用三維數據驅動表來代替 復雜的上層if 語句; int entrance_ticket_fee[][][] = { { {0,10} , {0,15} }, { {0,15},{15,30} } } 這是一個三維向量,三個維度分別代表了不同的限制, 第一維代表性別,索引 0代表女,1 代表男; 第二維代表是否是學生,索引 0代表是,索引 1 代表不是; 第三維代表是否是殘疾, 索引 0代表殘疾, 索引 1代表健康; 以上這個三維數組代表的是: 女孩,學生,殘疾 0元 女孩 ,學生,健康 10元; 女孩, 非學生,殘疾 0 元; 女孩, 非學生,非常急15元; 男孩,學生,殘疾 0元; 男孩,學生,健康,15元; 男孩,非學生,殘疾 15元; 男孩,非學生,健康,30元; 通過給定性別,是否是學生,是否殘疾,來確定其返回值; return entrance_ticket_fee[0][1][1] //15元; 2、索引驅動法: 由於很多情況,有分段時,各段情況不一樣,比如 按年齡來分,18歲以下和60歲以上的人 景區門票按照標準減一半,而 19 -- 59 之 間的人,門票和年齡相對應,那麽,如果還用直接索引法的話,對於0--18歲以下 和 60 歲以上,都對應一個數值,那麽其實可以用 一個索引來 代替,這樣就節省了空間,這種轉化通過函數來實現; 索引驅動是對直接驅動法在節約空間方面的改進; 3、階梯訪問表: 很多問題,並不需要一對一,而是要將其進行歸類,簡單的例子,比如說按成績分類: 100 - 90 : A 89 - 80 : B 79 -- 60 : C 59 -- 0 : D 給定一個數,判斷其所在的範圍,即可以雲階梯訪問。 階梯訪問是通過將要對比的數 (原數據) 和 各個區域的上限(或者下限)進行比較,可以選擇順序比較,也可以選擇二分法之類的。 階梯訪問是對 索引驅動法的在節約內存空間方面的再次改進
表驅動的認識以及用法——原創---非抄書