- 浏览: 3049399 次
- 性别:
- 来自: 海外
文章分类
- 全部博客 (430)
- Programming Languages (23)
- Compiler (20)
- Virtual Machine (57)
- Garbage Collection (4)
- HotSpot VM (26)
- Mono (2)
- SSCLI Rotor (1)
- Harmony (0)
- DLR (19)
- Ruby (28)
- C# (38)
- F# (3)
- Haskell (0)
- Scheme (1)
- Regular Expression (5)
- Python (4)
- ECMAScript (2)
- JavaScript (18)
- ActionScript (7)
- Squirrel (2)
- C (6)
- C++ (10)
- D (2)
- .NET (13)
- Java (86)
- Scala (1)
- Groovy (3)
- Optimization (6)
- Data Structure and Algorithm (3)
- Books (4)
- WPF (1)
- Game Engines (7)
- 吉里吉里 (12)
- UML (1)
- Reverse Engineering (11)
- NSIS (4)
- Utilities (3)
- Design Patterns (1)
- Visual Studio (9)
- Windows 7 (3)
- x86 Assembler (1)
- Android (2)
- School Assignment / Test (6)
- Anti-virus (1)
- REST (1)
- Profiling (1)
- misc (39)
- NetOA (12)
- rant (6)
- anime (5)
- Links (12)
- CLR (7)
- GC (1)
- OpenJDK (2)
- JVM (4)
- KVM (0)
- Rhino (1)
- LINQ (2)
- JScript (0)
- Nashorn (0)
- Dalvik (1)
- DTrace (0)
- LLVM (0)
- MSIL (0)
最新评论
-
mldxs:
虽然很多还是看不懂,写的很好!
虚拟机随谈(一):解释器,树遍历解释器,基于栈与基于寄存器,大杂烩 -
HanyuKing:
Java的多维数组 -
funnyone:
Java 8的default method与method resolution -
ljs_nogard:
Xamarin workbook - .Net Core 中不 ...
LINQ的恶搞…… -
txm119161336:
allocatestlye1 顺序为 // Fields o ...
最近做的两次Java/JVM分享的概要
论文写得快疯了嗯。上来换口气。
刚才看到问答频道的一个问题,javascript 数组差值排列
这前提是输入的数组必须是严格升序的,元素不能有重复。不然我下面的代码就都不行了 XD
如果不是严格升序,就得在fold的时候加点判断才行。
要是用F#来做极其简单……只要“叠”一次就好了 XD
用F# 1.9.6.16来做:(注意这个新版F#把List.fold_right改名叫List.foldBack了)
显示:
(怪哉,如果函数名用mergeToRanges,就得把函数体整个用括号包起来。用短一些的名字如m或merge就没事。这是怎么搞的……?发了封email去问原因,等回复ing)
于是把同样的逻辑写成JavaScript也行。不过F#的版本效率会好些,因为F#的表是链表而JavaScript的数组就是……数组。
显示:
(print()是Rhino的内建函数。要在浏览器里试的话用alert()替代。)
嘛,写成JavaScript之后多少有点怪就是了 XD
其实照一般思路要用JavaScript来写也很简单?
我在F#版里要用List.foldBack而不是List.fold是为了保持生成的列表顺序与原表的顺序一致。链表的特征使F#的表非得从后向前构造不可,所以要foldBack。
但JavaScript的数组就是数组,从前向后或从后向前构造都没问题。其实用fold可能对JavaScript来说更直观些。把fold进一步转换为循环,就变成了下面这样:(函数式的味道就没了 = =)
输出跟问题里问的不完全一样,不过要转换很方便,就不写了。
当然这种办法效率还不算很理想,特别是反复调用Array.concat()会创建很多小对象,不合算。要改进?回头再说……没空了 T T
继续潜下去鼓捣我的东西去 TvT
刚才看到问答频道的一个问题,javascript 数组差值排列
bjqincy 写道
一个数组,
[1,2,3,6,9,20,21,34,45,67,68]
将后一个与前一个的差值
假如连续差值等于1,就要将第一元素与最后一个输出
结果
显示为为一个table
显示效果:
1--3
6,
9,
20---21
34
45
67--68
[1,2,3,6,9,20,21,34,45,67,68]
将后一个与前一个的差值
假如连续差值等于1,就要将第一元素与最后一个输出
结果
显示为为一个table
显示效果:
1--3
6,
9,
20---21
34
45
67--68
这前提是输入的数组必须是严格升序的,元素不能有重复。不然我下面的代码就都不行了 XD
如果不是严格升序,就得在fold的时候加点判断才行。
要是用F#来做极其简单……只要“叠”一次就好了 XD
用F# 1.9.6.16来做:(注意这个新版F#把List.fold_right改名叫List.foldBack了)
let merge l = List.foldBack (fun e acc -> match acc with | x :: xs -> match x with | [a] -> if a - 1 = e then [e; a] :: xs else [e] :: acc | [a; b] -> if a - 1 = e then [e; b] :: xs else [e] :: acc | _ -> [e] :: acc) l [] printfn "%A" (merge [1; 2; 3; 6; 9; 20; 21; 34; 45; 67; 68])
显示:
[[1; 3]; [6]; [9]; [20; 21]; [34]; [45]; [67; 68]]
(怪哉,如果函数名用mergeToRanges,就得把函数体整个用括号包起来。用短一些的名字如m或merge就没事。这是怎么搞的……?发了封email去问原因,等回复ing)
于是把同样的逻辑写成JavaScript也行。不过F#的版本效率会好些,因为F#的表是链表而JavaScript的数组就是……数组。
function foldRight(func, ary, acc) { if (0 == ary.length) return acc return func(ary[0], foldRight(func, ary.slice(1), acc)) } function mergeToRanges(ary) { return foldRight(function(e, acc) { if (0 == acc.length) return [[e]].concat(acc) if (1 == acc[0].length && acc[0][0] - 1 == e) return [[e, acc[0][0]]].concat(acc.slice(1)) if (2 == acc[0].length && acc[0][0] - 1 == e) return [[e, acc[0][1]]].concat(acc.slice(1)) else return [[e]].concat(acc) }, ary, []) } print(mergeToRanges([1,2,3,6,9,20,21,34,45,67,68]).join('\n'))
显示:
1,3 6 9 20,21 34 45 67,68
(print()是Rhino的内建函数。要在浏览器里试的话用alert()替代。)
嘛,写成JavaScript之后多少有点怪就是了 XD
其实照一般思路要用JavaScript来写也很简单?
我在F#版里要用List.foldBack而不是List.fold是为了保持生成的列表顺序与原表的顺序一致。链表的特征使F#的表非得从后向前构造不可,所以要foldBack。
但JavaScript的数组就是数组,从前向后或从后向前构造都没问题。其实用fold可能对JavaScript来说更直观些。把fold进一步转换为循环,就变成了下面这样:(函数式的味道就没了 = =)
function mergeToRanges(ary) { var acc = null var last = null for (var i = 0; i < ary.length; i++) { var e = ary[i] if (!acc) { last = [e] acc = [last] } else if (1 == last.length && last[0] + 1 == e) { last = [last[0], e] acc[acc.length-1] = last } else if (2 == last.length && last[1] + 1 == e) { last = [last[0], e] acc[acc.length-1] = last } else { last = [e] acc = acc.concat(last) } } return acc } mergeToRanges([1,2,3,6,9,20,21,34,45,67,68]).join('\n')
输出跟问题里问的不完全一样,不过要转换很方便,就不写了。
当然这种办法效率还不算很理想,特别是反复调用Array.concat()会创建很多小对象,不合算。要改进?回头再说……没空了 T T
继续潜下去鼓捣我的东西去 TvT
评论
4 楼
oCameLo
2009-06-16
写论文写疯了,用这种东西换口气?不是应该去看看谜片或打开窗子大吼一声之类的么?FX果然是个好孩子。。
3 楼
RednaxelaFX
2009-06-08
好吧,那改回传统的for……
2 楼
night_stalker
2009-06-08
修正,上面是 alert(i) ……
1 楼
night_stalker
2009-06-08
对了,慎用 for .. in
譬如 JE 的页面打开 firebug 控制台,输入 for(i in []){alert(x)} 会让你很烦躁。
譬如 JE 的页面打开 firebug 控制台,输入 for(i in []){alert(x)} 会让你很烦躁。
发表评论
-
Function.prototype.bind
2013-09-24 18:07 0polyfill http://stackoverflow. ... -
Nashorn各种笔记
2013-07-15 17:03 0http://bits.netbeans.org/netbea ... -
JavaScript global properties are bound by name, not by value
2013-06-04 14:42 0function a() { console.log('a1' ... -
PICs and prototypes
2013-05-30 13:10 0In a lot of the implementations ... -
Nashorn notes
2013-05-28 10:44 0Nashorn NodeVisitor: the same a ... -
Building Blocks of a JavaScript Engine
2013-05-23 00:49 0sketches of my new book "B ... -
读《JavaScript语言精髓与编程实践(第二版)》
2013-05-21 00:32 02008年逛书店的时候偶 ... -
V8与c1visualizer
2011-08-21 21:00 0Subject: [v8-dev] Improved c1vi ... -
Rhino的JavaScript与Java的整合
2011-05-05 14:40 0http://www.mozilla.org/rhino/Sc ... -
this = null的杯具
2011-03-09 17:04 0this不允许赋值? FireFox表示吐槽 Chrome却欣 ... -
简单替换URL中查询字符串的参数值的代码
2010-04-11 17:49 6187刚有个需求是要把URL中query部分的一个指定参数的值替换为 ... -
JägerMonkey的组件介绍
2010-03-16 13:00 0David Mandelin JägerMonkey & ... -
眼见为实——V8的隐藏类与inline cache的例子
2010-03-02 13:42 0src/globals.h // State for inli ... -
JavaScript一些难以优化的地方
2010-03-02 08:54 0arguments with eval -
JägerMonkey与Carakan动态更新
2010-02-28 22:08 3038今天读了几篇与JavaScript引擎相关的帖。三篇关于Moz ... -
Opera的JS引擎,Carakan
2009-12-03 01:47 0Wikipedia 引用Presto is a layout ... -
with的陷阱
2009-11-21 18:41 0让eval()全局作用域执行的方法深入研究 用with(win ... -
虚拟机随谈(一):解释器,树遍历解释器,基于栈与基于寄存器,大杂烩
2009-10-17 02:52 133030(Disclaimer:如果需要转 ... -
再谈Google V8和Webkit Nitro
2009-08-21 18:11 0JavaScriptCore SquirrelFish -&g ... -
在WinXP上构建V8
2008-10-08 17:04 4491事实上非常容易,以至于没啥好写的。根据V8的官方文档就能顺利& ...
相关推荐
4. **合并连续项**:将连续的项合并为一个范围表示形式,即用“~”符号连接起始项和终止项。 ### 二、实现步骤详解 #### 1. 排序 首先,需要对输入项进行排序。这一步骤可以通过多种方式实现,例如使用.NET ...
- **数据区域**:通常,我们所说的“表格数据”指的是工作表中特定的连续单元格范围,如A1到B5。 2. **Excel内置功能:** - **合并单元格**:这是最基本的合并操作,将相邻的单元格内容合并到一个单元格中。 - *...
这通常涉及到使用`Sheet.getNumMergedRegions()`方法来获取合并区域的数量,然后使用`Sheet.getMergedRegion(i)`来获取每一个合并区域的`CellRangeAddress`对象。接下来,比较目标单元格的行列位置与合并区域的边界...
通常,这涉及到时间线编辑,用户可以通过设置开始和结束时间来确定剪切范围。此外,高级的视频剪切工具还支持预览、时间码显示等功能,以便于用户准确操作。 2. 音频剪切:与视频剪切类似,音频剪切专注于音频轨道...
- **填充序列**:选中一个单元格,输入起始数字,然后按Ctrl+D填充相同序列到其他单元格。 - **快速选择整列或整行**:单击列标(如A、B等)或行号(如1、2等)即可选择整列或整行。 - **查找和替换**:使用Ctrl+F...
然而,有时我们需要对FLV文件进行编辑,比如将多个片段合并成一个连续的视频,或者从一个大文件中提取特定部分。这就需要用到FLV合并与切割工具。下面将详细解释这个过程以及相关的技术知识。 首先,我们来看“FLV...
MP3音频处理是数字音乐制作和编辑中的常见任务,它涉及到对音频文件的合并与剪切,以便于创作个性化音乐、制作播客或为视频添加背景音乐。本软件"MP3精确合并及剪切_3.0_单文件版(含注册码)"是一款专注于MP3格式的...
文档"Professional元件库列表及中英文对照合并版.docx"主要涵盖了广泛的...这个元件库列表对理解和设计电子系统具有很高的价值,涵盖了从基础元件到复杂集成电路的全面范围,为电子工程师和爱好者提供了丰富的资源。
MP3matePro是一款专为用户设计的高效、易用的MP3处理工具,它允许用户轻松地合并多个MP3文件,创建连续的播放列表或自定义的音乐作品。这款软件以其强大的功能和简洁的操作界面,深受广大音乐爱好者的喜爱。 【描述...
- 对于像素数量较少的灰度级,它们被合并到了新的灰度级上; - 对于像素数量较多的灰度级,它们之间的间隔被拉大,无法形成连续、均匀的分布。 #### 题目四:直方图均衡化重复应用 题目询问如果一幅图像已经用直方...
公司代码、上市公司代码、A股股票代码、截止日期、合并标识、调整标识、科目名称、科目代码、期初余额元、期未余额元、原值, 3、范围:A股上市公司 4、来源:原始数据整理自wind 5、测算方法: 1. 筛选与数字化转型...
从 Oracle 合并到 MySQL 的 NPR 实例分析深入解析了国家公共广播电台(NPR)在数据库迁移过程中遇到的关键挑战及解决方案。本文将基于提供的标题、描述和部分内容,详细阐述数据库迁移过程中的核心知识点。 ### ...
在IT行业中,尤其是在编程领域,将数字转换为汉字大写是一项常见的需求,特别是在财务和会计系统中,因为...在实际项目中,这样的功能可能还需要考虑性能优化,例如使用缓存减少重复计算,或者扩展支持更大的数字范围。
zip() 函数可以将多个列表合并成一个列表,学生需要编写代码,使用这个函数将多个列表合并。 8. 编写程序,输出每位上的数字: 学生需要编写程序,输入任意长度的正整数,然后输出每位上的数字,并使用英文逗号...
- **功能**:通常提供选择性分割,支持按单页、多页、连续页或指定页码范围进行分割,以及按书签分割等。 2. **PDF合并**: - **需求**:在多个相关的PDF文件中,用户可能希望将它们整合成一个统一的文档,便于...
这个过程中,由于在实际操作中,我们通常会对连续的灰度值进行合并,因此均衡化后的直方图并非绝对平坦。最后,通过`imshow`展示处理结果,并用`imwrite`保存图像。 实验二探讨了频域平滑滤波,主要用于去除图像...
将连续数字包装到范围内。 安装 $ npm install tiny-range 用法 var range = require ( 'tiny-range' ) ; var result = range . parse ( '0, 1, 7~8, 9-10, 100~105' ) ; // result: [[0, 1], [7, 10], [100, 105]...
在数字图像处理领域,Hough变换是一种非常重要的技术,它被广泛用于检测图像中的直线、圆、椭圆等几何形状。Hough变换的基本思想是通过将图像空间中的几何元素(如直线)转换到参数空间中的一系列峰值来寻找这些元素...
2. 量化:将连续的灰度或色彩范围转换为离散的等级,即灰度或色彩深度。例如,8位图像可表示256个灰度等级。 3. 转换:如RGB到灰度转换,将三原色组合成单一的灰度值。 三、图像基本操作 1. 图像增强:通过改变图像...
随着数字电视技术的飞速发展,从信源编码、信道编码调制、射频传输到终端解码等多个环节都得到了显著的进步。其中,数字电视终端产品的性能直接影响着用户的观看体验。在这些环节中,解码能力尤为重要,它直接决定了...