数组

javascript的数组之reduce()

泪湿孤枕 提交于 2020-03-21 14:27:08
reduce()方法对累加器和数组中的每个元素(从左到右)应用到一个函数中,最终得到一个值并返回 1 const array1 = [1, 2, 3, 4]; 2 const reducer = (accumulator, currentValue) => accumulator + currentValue; 3 4 // 1 + 2 + 3 + 4 5 console.log(array1.reduce(reducer)); 6 // expected output: 10 7 8 // 5 + 1 + 2 + 3 + 4 9 console.log(array1.reduce(reducer, 5)); 10 // expected output: 15 参数: 第一个:callback回调函数(accumulator, currentValue, currentIndex, array) 第二个:initalValue初始值,作为第一个执行回调函数的accumulator值,reduce的index初始索引为0。如果没有initalValue,则使用数组第一个元素作为accumulator值,并且从第二个元素开始执行回调函数,此时reduce初始索引为1。 返回值:函数累计的数组元素叠加值。 来源: https://www.cnblogs.com

ES6 函数

主宰稳场 提交于 2020-03-21 13:41:33
1.允许函数参数的默认值 function log(x, y = 'World') { console.log(x, y); } log('Hello') // Hello World log('Hello', 'China') // Hello China log('Hello', '') // Hello 2.reset参数 // arguments变量的写法 function sortNumbers() { return Array.prototype.slice.call(arguments).sort(); } // rest参数的写法 const sortNumbers = (...numbers) => numbers.sort(); 上面代码的两种写法,比较后可以发现,rest 参数的写法更自然也更简洁。 arguments 对象不是数组,而是一个类似数组的对象。所以为了使用数组的方法,必须使用 Array.prototype.slice.call 先将其转为数组。rest 参数就不存在这个问题,它就是一个真正的数组,数组特有的方法都可以使用。下面是一个利用 rest 参数改写数组 push 方法的例子。 3.箭头函数   如果箭头函数的代码块部分多于一条语句,就要使用大括号将它们括起来,并且使用 return 语句返回。   如果箭头函数不需要参数或需要多个参数

Java数据结构与算法-栈和队列

主宰稳场 提交于 2020-03-21 12:46:39
   (摘录加总结)------   栈和队列不属于基础的数据结构,它们都属于线性表。 一、栈   对于栈存储操作元素只能在栈结构的一端进行元素的插入和删除,是一种性质上的线性表结构。按照“先进后出”的原则进行存储数据。先进的元素在栈底,后进的元素在栈顶。需要读数据的时候从栈顶开始弹出数据(最后一个数据被第一个读出来)。比较常规的说明是:栈底固定,而栈顶浮动;栈中元素个数为零时称为 空栈 。插入一般称为 进栈(PUSH) ,删除则称为 退栈(POP) 。   栈的实现结构包括 顺序结构实现 和 链式结构实现 。前者依据的是 数组 ,后者是 链表 。    (1)利用数组实现栈    下面这个是一个基本的实现:①在Stack底层设置了一个int数组,当然可以使用泛型来指代不同的数据类型。最大容量和栈顶位置。特别需要注意的是在初始化时也看出来,一般在初始化的时候top位置设置为-1,这是利于后面在压入数据的时候数组的第一位是array[0],并且maxSize最大容量和数组的length是一致的。②top表示这个数组的当前的没有被设置元素的第一个位置的标志位是多少,首先要判断是否小于maxSize-1,因为是从-1开始的,并且每次判断都是++top,是先自增的处理,示意如下,假如初始化了一个容量为3的数组:   ③当压栈完成的时候自然top的索引值已经变成了数组最高项的值的大小

shell脚本编程高级篇

徘徊边缘 提交于 2020-03-21 12:40:58
SHELL脚本编程进阶 循环执行:简单来说就是把一些指令重复循环。 循环代码具体的指令有三种: for , while , until其中for, while用的最多。 for循环 for 变量名 in 列表;do 循环体 done 关键字的帮助都是用help来查询。 for循环语法:在shell编程中 for,in,do,done。这些都是他的关键字,其中循环的指零就放在do和done之间。 WORDS决定了循环次数。 循环的次数由in 后面跟的WORDS(字符串)的数量决定。字符串的个数决定了do和done之间的指令执行的次数。 $ :for认为是一个整体 br/>$@:for认为是独立的参数 for循环逻辑:↓↓ :这条命令意思是,将i变量为1 22 33 等于说i同时等于这3个变量然后用到$i把变量显示出来第一次i就是1第二次i就是22第三次i就是333这就是for循环的逻辑。 :还可以使用花括号或字母一次性显示完。 for脚本编辑语法:,脚本意思是i变量为arg而$@是独立的一个整体执行为脚本后面跟123代表arg is 独立的123。 :这是重复创建10次用户的意思i变量为{1..10}这个范围 :这是让FILE变量为userlist.txt这个文件然后执行这个文件里有多少用户,在来循环多少次。 :不用创建脚本也可以在外执行for结尾必须使用;隔开done

Arrays的两个工具

感情迁移 提交于 2020-03-21 10:52:31
1 package DemoArrays; 2 3 import java.util.Arrays; 4 5 /* 6 java.util.Arrays是一个与数组相关的工具类,里面提供了大量静态方法,用来实现数组常见的操作。 7 8 public static String toString(数组):将参数数组变成字符串(按照默认格式:[元素1,元素2,元素3......]) 9 public static void sort(数组):按照默认升序(从小到大)对数组的元素进行排序。 10 11 备注: 12 如果是数值,sort默认按照升序从小到大 13 如果是字符串,sort默认按照字母升序 14 如果是自定义的类型,那么这个自定义类需要有Comparable或者Comparator接口的支持。(今后学习) 15 */ 16 public class DemoArrays01 { 17 public static void main(String[] args){ 18 int[] intArray = { 10 ,20 ,30 }; 19 //将int[]数组按照默认格式变成字符串 20 String intStr = Arrays.toString(intArray); 21 System.out.println(intStr);// [10, 20, 30] 22 23

数组去重的方法有哪些?

℡╲_俬逩灬. 提交于 2020-03-21 06:33:42
1.遍历数组法 最简单的去重方法,实现思路:新建一新数组,遍历传入数组,值不在新数组就加入该新数组中;注意点:判断值是否在数组的方法"indexOf"是ECMAScript5方法,IE8以下不支持需多写一些兼容低版本浏览器代码,源码如下: // 最简单数组去重法 function unique1(array){ var n = [ ]; //一个新的临时数组 //遍历当前数组 for(var i = 0; i < array.length; i++){ //如果当前数组的第i已经保存进了临时数组,那么跳过, //否则把当前项push到临时数组里面 if (n.indexOf(array[i]) == 一1) n.push(array[i]); } return n; } // 判断浏览器是否支持indexOf ,indexOf 为ecmaScript5新方法 IE8以下(包括IE8, IE8只支持部分ecma5)不支持 if (!Array.prototype.indexOf){ // 新增indexOf方法 Array.prototype.indexOf = function(item){ var result = 一1, a_item = null; if (this.length == 0){ return result; } for(var i = 0, len =

Java程序性能优化Tip

你说的曾经没有我的故事 提交于 2020-03-21 05:43:24
本博客是阅读<java time and space performance tips>这本小书后整理的读书笔记性质博客,增加了几个测试代码,代码可以在此下载: java时空间性能优化测试代码 ,文件StopWatch是一个秒表计时工具类,它的代码在文末。 1. 时间优化 1.1 标准代码优化 a. 将循环不变量的计算移出循环 我写了一个测试例子如下: import util.StopWatch; /** * 循环优化: * 除了本例中将循环不变量移出循环外,还有将忙循环放在外层 * @author jxqlovejava * */ public class LoopOptimization { public int size() { try { Thread.sleep(200); // 模拟耗时操作 } catch(InterruptedException ie) { } return 10; } public void slowLoop() { StopWatch sw = new StopWatch("slowLoop"); sw.start(); for(int i = 0; i < size(); i++); sw.end(); sw.printEclapseDetail(); } public void optimizeLoop() { StopWatch sw =

java第十三天_集合,List集合

大兔子大兔子 提交于 2020-03-21 04:02:47
集合类: 为什么出现集合类:面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,就对对象进行存储,集合就是存储对象最常用的一种方式。 数组和集合类同时容器,有何不同? 数组虽然也可以存储对象,但长度是固定的;集合 长度是可变的 。 数组中可以存储基本数据类型,集合 只能存储对象 。 集合类的特点: 集合只能用于存储对象( 对象的引用(地址 ) ) 集合长度是可变的 集合可以存储不同类型的对象。 集合框架的构成及分类: 迭代器: 基本格式: Iterator it = al iterator ( ) ;//获取迭代器,用于取出集合中的元素。 while ( it.hasNext ( ) ) //使用for循环更加节约内存。 { sop ( it.next ( ) ) ; } 使用迭代器的需求: 把取出方式定义在集合的内部,这样取出方式就可以直接访问集合内容的元素。那么取出方式就被定义成了内部类。而每一个容器的数据结构不同,所以取出的动作细节也不一样。但是都有共性的内容,判断和取出。那么可以将写共性抽取。那么这些内部类都符合一个规则。该规则是Iterator如何获取及诶和的取出对象呢?通过一个对外提供的方法。Iterator (); 在迭代时,不可以通过集合对象的方法操作集合中的元素。因为会发生ConcurrentModificationException异常。

Excel表格转Json数据结构

北慕城南 提交于 2020-03-21 03:23:54
Excel表格转Json数据结构 辗转了好几个项目,每个项目的导表工具都巨难用,速度慢,潜规则多,扩展性差,不易于调试。Sqlite,Json,Lua,Xml各种格式都用过。 举个例子: 大多数导表工具不支持文本数组的解析,因为它们对数组的解析算法异常粗暴,无非就是一个Split(value, ","),当你的文本数组没有逗号时,一切都OK,一旦出现逗号,解析结果错误,但程序依旧正常运行,直到游戏中读取错误时,你才能意识到出问题了。 不能类型组合,通常这些导表工具都不支持类型之间的组合,例如整数数组,哈希数组等等。有的支持整数数组,但它并不是把整数和数组两个类型结合,而是单独定义了一个 整数数组 的类型,当需要稍微复杂一点的结构时,则不支持甚至完全不能实现,比如数组嵌套数组。 错误无法定位,输出的错误信息几乎没有看不懂,策划更是束手无策。 没有类型安全,当配置表的某个字段名被修改时,程序可能完全不知道,直到游戏中读取配置错误。 数据结构 在数据结构上我个人最理想的数据格式是Json。 Sqlite 对客户端不友善,大多数客户端对SQL语句并不熟悉。作为配置数据而言,关系数据库的优势并不明显,如果数据查询需要复杂的SQL语句,这个数据结构设计本身就是错误的,如果仅使用简单的SQL语句查询,那为什么不直接用Key-Value数据结构?此外,Sqlite需要用专门的数据库软件浏览

数组、字符串和指针

感情迁移 提交于 2020-03-21 01:28:33
1.如何使用数组   数组就是一组名为数组元素或简称元素的内存位置,各个内存位置可以存储相同数据类型的数据项,而我们可以用相同的变量名引用所有内存位置。 2.如何声明和初始化不同类型的数组   声明数组:例如 long height[6];   初始化数组:例如 int engine_size[5] = {200, 250, 300, 350, 400};   C++11标准定义了一种表示一组初始值的新的统一方式,对于用这种方式初始化的所有对象,这些初始值都是相同的,包括标准模板库容器和数组。   例如:int value[]{2,3,4}; 有了这种语法,=操作符就是不必要的。 3.如何对数组使用基于范围的for循环   例如: double temperatures[] = {65.5, 68.0, 75.0, 77.5, 76.4, 73.8, 80.1};       double sum = 0.0;       int count = 0;       for(double t : temperatures){         sum += t;         ++count;       }       double average = sum/count;   还可以使用auto关键字来编写该循环:     for(auto temperature :