在讲“Array”先生和他的新伙伴“谓词”之前,让我们先回顾一下常写的一些程序片断。

假定我们有了一个存储股票代码的数组

“Array”先生的新伙伴:“谓词”        //声明并构造一个股票代码的组合
;

如果要判断数组中是否有满足某个条件的值,那么我们常规的写法是这样的:

“Array”先生的新伙伴:“谓词”        //判断存在性
“Array”先生的新伙伴:“谓词”
        foreach (string StockID in StockIDAry)
        }

如果要找出数组中满足某个条件的元素,再组合成新的数组,你可能会这样写:

“Array”先生的新伙伴:“谓词”        ArrayList aryLst = new ArrayList();
“Array”先生的新伙伴:“谓词”
“Array”先生的新伙伴:“谓词”        
//找到满足条件的值
“Array”先生的新伙伴:“谓词”
        foreach (string StockID in StockIDAry)
        }

诸如此类,根据一个条件来进行数组循环,获取一个判断,或者一个结果元素,或者结果数组。写法也大同小异的差不多。
善良的微软总是为我们程序员着想的,为了减少这种重复的手工劳动,在.net framework 2.0里,推出了 谓词 这个概念。
“谓词”从语文上讲就是:作一个动作的词语
那么,谓词这玩意拿来做什么呢?存在必有理。我们先看上面两段程序用了谓词之后的代码段:

“Array”先生的新伙伴:“谓词”bool isExist = Array.Exists(StockIDAry, SearchRule);

 

“Array”先生的新伙伴:“谓词”string[] subArray = Array.FindAll(StockIDAry, SearchRule);

不好意思还没完,我们的主角“谓词”先生还没登场,且看

“Array”先生的新伙伴:“谓词”    //从股票代码的组合中抽取代码的 搜索谓词
“Array”先生的新伙伴:“谓词”
    private static bool SearchRule(String s)
    }

在这个示例里,“谓词”先生的名字叫着 SearchRule 。

怎么样?看到“谓词”先生的神通广大了吧?其实我们还忽视了真正的主角“Array”。正是这默默无闻的“Array”充当了幕后的主角,在.net Framework 2.0的舞台上,他拥有了几项新的超能力,正是这些超能力又让我们可怜的程序员,编码工,减少了一点机械的工作。“Array”真是个好yin!

“Array”先生的新伙伴:“谓词”        //显示 搜索谓词 的存在性
“Array”先生的新伙伴:“谓词”
        Array.Exists([搜索的数组],[谓词])
“Array”先生的新伙伴:“谓词”        
//显示 搜索谓词 是否对数组中所有元素都有效
“Array”先生的新伙伴:“谓词”
        Array.TrueForAll([搜索的数组],[谓词])
“Array”先生的新伙伴:“谓词”        
//显示 搜索谓词 找到的数组中的第一个匹配项
“Array”先生的新伙伴:“谓词”
        Array.Find([搜索的数组],[谓词])
“Array”先生的新伙伴:“谓词”        
//显示  搜索谓词 找到的数组中的最后一个匹配项
“Array”先生的新伙伴:“谓词”
        Array.FindLast([搜索的数组],[谓词])
“Array”先生的新伙伴:“谓词”        
//获取 搜索谓词 找到的数组中的所有匹配项
“Array”先生的新伙伴:“谓词”
        Array.FindAll([搜索的数组],[谓词])

完整的大戏剧本在这里。戏怎么演,你们自己选择:

“Array”先生的新伙伴:“谓词”using System;
“Array”先生的新伙伴:“谓词”
“Array”先生的新伙伴:“谓词”
public class Example

完全的谢幕之前,我们还发现了一个隐藏的谓词“PrintID”:

“Array”先生的新伙伴:“谓词”Array.ForEach(StockIDAry, PrintID);

PrintID 代码也是一个“谓词”,只是在这里他不是用来做搜索,而是用来处理数据组中的每一个元素。这个方法看上去也非常实用,在需要循环数组元素,做一些事情的时候,可以用现在这种方式了。

剧本下载:/Files/heekui/predication.rar

The End.
 

相关文章: