扁平化

扁平化数组以及数组去重

雨燕双飞 提交于 2019-12-16 10:05:24
编写一个程序,将数组扁平化,并去除其中重复部分,最终得到一个升序且不重复的数组: 就它啦: let arr = [3, 12, 1, 2, [3, 4, 4, [5, 4,6, [8,9,7, 8, [9, 10, 11]]]]];   第一种方法 ,直接调用arr的 flat 方法 arr = arr.flat(Infinity); 有个小点儿要说明。arr.flat()默认只展开一级,默认括号内为 1那么上面的arr展开为 flat(2)为    为了一步到位,直接flat(Infinity);还有一件事,如果数组内有空的选项,则会被删除   let arr1 = [1, 1, , 2]   arr1 = arr1.flat(Infinity);   console.log(arr1)    打印出只有[1, 1, 2] 然后如何数组去重呢 :    new Set(arr)       返回的是一个对象 , 伪数组    如何将变成数组呢?   两种方法: 1.展开运算符  [...new Set(arr)] 使其变成数组 2.Array.from() 可将一个 伪数组对象或者可遍历对象转换成一个真正的数组 即 Array.from(new Set(arr)) Array.from有三个参数,Array.from(arrayLike[, mapFn[, thisArg]])

Leetcode 430:扁平化多级双向链表

[亡魂溺海] 提交于 2019-12-12 11:42:19
题目描述 您将获得一个双向链表,除了下一个和前一个指针之外,它还有一个子指针,可能指向单独的双向链表。这些子列表可能有一个或多个自己的子项,依此类推,生成多级数据结构,如下面的示例所示。 扁平化列表,使所有结点出现在单级双链表中。您将获得列表第一级的头部。 示例: 输入: 1---2---3---4---5---6--NULL | 7---8---9---10--NULL | 11--12--NULL 输出: 1-2-3-7-8-11-12-9-10-4-5-6-NULL 以上示例的说明: 给出以下多级双向链表: 我们应该返回如下所示的扁平双向链表: 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/flatten-a-multilevel-doubly-linked-list 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 解题思路 class Solution { public: Node* flatten(Node* head) { Node *cur = head; while(cur != NULL){ if(cur->child != NULL){ Node* post = cur->next; Node* child = cur->child; cur->child = NULL; cur-

WPF metro扁平化UI控件库:MahApps.Metro

点点圈 提交于 2019-12-09 03:59:14
MahApps.Metro 的使用小结。 最近项目中接触到一款metro扁平化样式UI控件库,非常值得推荐。写下这篇博客,希望在总结中能不断提高。同时希望能为读者提供一些帮助~ 一,链接 官方示例地址 官方控件示例地址 github项目地址 二,安装 通过NuGet GUI(右键单击您的项目,点击NuGet包管理中,选择在线和搜索MahApps.Metro) 包管理器控制台: PM> Install-Package MahApps.Metro 三,实现Metro样式 1,XAML窗体中进行xmlns引用 xmlns: controls= "clr-namespace:MahApps.Metro.Controls;assembly=MahApps.Metro" 2,对Window标签进行替换 <controls:MetroWindow ... 3,修改窗体cs代码中的继承 //引用 using MahApps.Metro.Controls; namespace MetroWPF { /// <summary> /// MainWindow.xaml 的交互逻辑 /// </summary> public partial class MainWindow : MetroWindow { public MainWindow () { InitializeComponent(); } }

Scala中List的map和flatMap的区别

馋奶兔 提交于 2019-12-07 19:15:47
写在前面: map方法的核心是映射每个元素并进行操作后将结果保存为一个列表,最后汇集所有的结果列表作为列表元素形成一个新的列表 flatMap房的核心是先映射每个元素,然后进行操作,然后进行扁平化处理,最后汇集所有进行扁平化处理的结果集形成一个新的列表(扁平化:简而言之就是去除所有的修饰) 1.map的例子(摘自Scala编程) 2.map的例子(本人) 从上面的例子中可以看出,map只是将子元素遍历出来进行了操作(下面的例子可以帮助你更好的理解) 我们可以发现,只对一级子类进行操作处理(并不关心子类是什么类型) 3.flatMap的例子(摘自Scala编程) 4.flatMap的例子(本人) 从上可以看出,flatMap是先将子元素遍历出来,然后对子元素进行操作,然后进行扁平化处理(正如文章开头所定义的那样)。那么如果子元素也是列表呢?下面的例子来验证我们的想法 由上可以看出,flatMap执行扁平化时,如果其中一个子元素是List(a:Object,b:Object),会变成a,b 因为将这个子元素的元素打散,就是扁平化,但是a还是a,b还是b,不关心a或者b的类型。 简而言之:flatMap只执行一层扁平化,即子类元素扁平化,不会执行子类元素的子类元素的扁平化。 5.map与flatMap的区别例子 观察上面两个例子,再看文章开头那句话

扁平化多级双向链表

浪子不回头ぞ 提交于 2019-12-04 00:54:21
您将获得一个双向链表,除了下一个和前一个指针之外,它还有一个子指针,可能指向单独的双向链表。这些子列表可能有一个或多个自己的子项,依此类推,生成多级数据结构,如下面的示例所示。 扁平化列表,使所有结点出现在单级双链表中。您将获得列表第一级的头部。 示例: 输入: 1---2---3---4---5---6--NULL | 7---8---9---10--NULL | 11--12--NULL 输出: 1-2-3-7-8-11-12-9-10-4-5-6-NULL 以上示例的说明: 给出以下多级双向链表: 我们应该返回如下所示的扁平双向链表: 解法1: public Node flatten(Node head) { /*如果双向链表是空则返回空*/ if (head == null) { return null; } /*展开双向链表*/ helper(head); /*返回头节点*/ return first; } public void helper(Node node) { /*当节点不为空时*/ while (node != null) { /*尾节点不为空时,赋值尾节点的下一个节点是当前节点,当前节点的上一个节点是尾节点,当尾节点为null时,说明是初始化,赋值头节点为当前节点*/ if (last != null) { last.next = node; node

并查集浅谈及其扁平化

狂风中的少年 提交于 2019-12-03 04:06:18
本人水平有限,题解不到为处,请多多谅解 本蒟蒻谢谢大家观看 并查集(普及基本知识) 1:目的 并查集的目的很容易理解,通俗点就是说你的亲戚的亲戚也是你的亲戚,用来检测任意两点是否同在一个集合内。 2:实现办法 实现的办法主要判断两点的最远公共祖先是否一样(亦就是两点所在的集合的根节点),我们可以定义一个fa[i]数组表示i的父亲,一开始所有点的父亲都是他自己(因为一开始每个点所代表的集合只有该店一个点而已,所以这个集合的根节点就是该点),随后会读进来几组数据,例如A B,则代表点A和点B是亲戚。则将fa[A]赋值为B或者将fa[B]赋值为A?显然是不对的,因为A和B的合并并不仅仅代表这两点,而是他们所在的集合。举个例子:你和一个女孩成了亲,那么原来她爷爷的奶奶的爷爷的奶奶的…以前和你没半毛钱关系,但是现在你爷爷的奶奶的爷爷的奶奶的…都和此人成为了亲戚,所代表的就是你和她的集合合并了。 3:合并点分别在的集合的根节点 可能听起来有些拗口,但实际上还是很容易理解的,我们可以定义一个find函数,find(x)表示点x所在的集合的根节点,那么我们只要询问点x的父亲点是否为他自己,如不是再询问x的父亲…一直找到根节点为止,那么就有这样一段代码: code: 1 int find(int o) 2 { 3 if(o==fa[o])return o;//如果点o的父亲点是他自己

JS数组扁平化(flat)

我怕爱的太早我们不能终老 提交于 2019-12-01 10:32:53
需求 :多维数组=>一维数组 let ary = [1, [2, [3, [4, 5]]], 6]; let str = JSON.stringify(ary); 第0种处理:直接的调用 arr_flat = arr.flat(Infinity); 第一种处理 ary = str.replace(/(\[\]))/g, '').split(','); 第二种处理 str = str.replace(/(\[\]))/g, ''); str = '[' + str + ']'; ary = JSON.parse(str); 第三种处理:递归处理 let result = []; let fn = function(ary) { for(let i = 0; i < ary.length; i++) }{ let item = ary[i]; if (Array.isArray(ary[i])){ fn(item); } else { result.push(item); } } } 第四种处理:用 reduce 实现数组的 flat 方法 function flatten(ary) { return ary.reduce((pre, cur) => { return pre.concat(Array.isArray(cur) ? flatten(cur) : cur); }) }

JavaScript 数据扁平化处理

送分小仙女□ 提交于 2019-12-01 08:07:42
// 数组扁平化处理 [1,2,[3,4,[5,6]]].flat(); // 对象扁平化处理 Object.flatten = function(obj){ var result = {}; function recurse(src, prop) { var toString = Object.prototype.toString; if (toString.call(src) == '[object Object]') { var isEmpty = true; for (var p in src) { isEmpty = false; recurse(src[p], prop ? prop + '.' + p : p) } if (isEmpty && prop) { result[prop] = {}; } } else if (toString.call(src) == '[object Array]') { var len = src.length; if (len > 0) { src.forEach(function (item, index) { recurse(item, prop ? prop + '.[' + index + ']' : index); }) } else { result[prop] = []; } } else { result[prop

数组扁平化

有些话、适合烂在心里 提交于 2019-12-01 00:03:02
将数组中的数据扁平化 一、常规方法——递归 function flatten0(arr){ var result=[]; for(var i=0;i<arr.length;i++){ if(Array.isArray(arr[i])){ result=result.concat(flatten0(arr[i])); } else{ result.push(arr[i]) } } return result; } 二、toString方法 将数组转换成字符串格式,然后按照","分隔。 console.log(arr.toString().split(",").map(item=>+item)) 但,如你所见,一旦数组中出现函数等元素,这种方法就不适用了。 这里还有一个小点比较有趣 关于+运算符:         一元正号运算符位于其操作数前面,计算其操作数的数值,如果操作数不是一个数值,会尝试将其转换成一个数值。 尽管一元负号也能转换非数值类型,但是一元正号是转换其他对象到数值的最快方法,也是最推荐的做法,因为它不会对数值执行任何多余操作。它可以将字符串转换成整数和浮点数形式,也可以转换非字符串值 true,false 和 null。小数和十六进制格式字符串也可以转换成数值。负数形式字符串也可以转换成数值(对于十六进制不适用)。如果它不能解析一个值,则计算结果为 NaN。 三

将数组扁平化并去除其中重复数据,最终得到一个升序且不重复的数组

回眸只為那壹抹淺笑 提交于 2019-11-27 06:17:18
问题描述:已知如下数组: var arr = [ [1, 2, 2], [3, 4, 5, 5], [6, 7, 8, 9, [11, 12, [12, 13, [14] ] ] ], 10]; 编写一个程序将数组扁平化去并除其中重复部分数据,最终得到一个升序且不重复的数组解决问题: 思路: 扁平化处理 => 去重 => 升序 step1:  借助数组自带的flat函数进行扁平化处理   var newArray =arr.flat(depth) //flat方法依赖浏览器支持,部分低版本浏览器可能不支持该方法   step2:   ES6提供了一个强大的数组去重方法 Set     var newArray =Array.from(new Set(arr))  step3:  常用排序 sort方法   var newArray =arr.sort((pre,next)=>{return pre - next})   Array.from(new Set(arr.flat(4))).sort((pre,next)=>{ return pre-next}) //低版本chrome不支持flat方法 还有一种简单的扁平化实现方法,但不太推荐: Array.from(new Set(arr.toString().split(","))).sort((pre,next)=>{