分析C#、JavaScript和Java的集合数据处理
C# 的集合数据基类是 Collection<T>,它实现了 ICollection<T>接口,而 ICollection<T> 又从 IEnumerable<T> 接口继承——实际上要讨论的内容都基于 IEnumerable<T> 接口。另外还有一个非泛型的 IEnumerable 接口,不过建议大家尽量使用泛型,所以这个非泛型的接口就当我没说。顺便提一句,数组也是实现了 IEnumerable<T> 接口的。System.Linq 中提供的扩展大大方便了集合处理过程。 JavaScript 最常见的集合数据类型就是数组,自 ES6 发布以后,这个范围扩展到了 iterable 对象。不过这里要讨论的内容都是在Array.prototype 中实现的。除此之外,underscore、lodash 这些第三方库中也实现了很多集合数据处理的方法,但不在本文讨论内容之内。 Java 的集合类型由 Collection<E> 接口定义。本文讨论的内容是 Java 8 的特性,在 java.util.stream 包中实现,由Collection<E>.stream() 引入。 示例语言版本 后面示例中的部分 C# 语句可能需要支持 6.0 语言版本的编译器,如 Visual Studio 2015 或者 Visual Studio "15" JavaScript 代码都使用了 ES6 语法,目前大部分浏览器支持,Node 5 也完全支持。 Java 要求 Java 8(或 1.8)版本 遍历 问题提出 给定一个名称列表,数组类型, ["Andy", "Jackson", "Yoo"],要求遍历出到的控制台。 C# 的遍历 对于集合来说,最常用的就是遍历,不过 for,foreach, while 之类大家都耳熟能详了,不再多说。这里说的是 forEach() 方法。 很遗憾,C# 的 Linq 扩展 里没有提供 ForEach() 方法,不过 All(IEnumerable<T>, Func<T, Boolean>) 和 Any(IEnumerable<T>, Func<T, Boolean>) 都可以代替。这两个方法的区别就在于第二个参数 Func<T, Boolean> 的返回值。这两个方法都会遍历集合,对集合中的每个元素依次调用第二个参数,Func<T, Boolean> 所指的委托方法,并检查其返回值,All() 检查到 false 中止遍历,而Any() 检查到 true 中止遍历。 All() 的意思是,所有元素都符合条件则返回 true,所有只要有一个不符合条件,返回了 false,则中止遍历,返回false;Any() 的意思是只要发现有元素符合条件则返回 true。 Func<T, Boolean> 是一个公用委托。Func<...> 系列公用委托都用于委托带有返回值的的方法,所有 Func<..., TResult>都是***一个参数 TResult 代表返回值类型。 (编辑:通化站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |