Haskell的网站介绍了一个非常有吸引力的5行快速排序功能,如下所示.
quicksort [] = []
quicksort (p:xs) = (quicksort lesser) ++ [p] ++ (quicksort greater)
where
lesser = filter (< p) xs
greater = filter (>= p) xs
Run Code Online (Sandbox Code Playgroud)
它们还包括"C中的真正快速排序".
// To sort array a[] of size n: qsort(a,0,n-1)
void qsort(int a[], int lo, int hi)
{
int h, l, p, t;
if (lo < hi) {
l = lo;
h = hi;
p = a[hi];
do {
while ((l < h) && (a[l] <= p))
l …
Run Code Online (Sandbox Code Playgroud) 我有一个stdClass
名为的对象$post
,当转储通过时print_r()
,返回以下内容:
stdClass Object (
[ID] => 12981
[post_title] => Alumnus' Dinner Coming Soon
[post_parent] => 0
[post_date] => 2012-01-31 12:00:51
)
Run Code Online (Sandbox Code Playgroud)
通过调用json_encode()
此对象来回显结果会导致以下结果:
{
"ID": "12981",
"post_title": null,
"post_parent": "0",
"post_date": "2012-01-31 12:00:51"
}
Run Code Online (Sandbox Code Playgroud)
我假设单引号的东西导致json_encode
窒息,但我不知道需要什么格式来逃避.有任何想法吗?
编辑:修复了代码示例中的不匹配问题.我正在运行PHP 5.3.8版
EDIT2:在编码对象后,我直接执行了以下操作:
echo json_last_error() == JSON_ERROR_UTF8;
Run Code Online (Sandbox Code Playgroud)
这打印1
,这意味着发生以下错误:"格式错误的UTF-8字符,可能编码错误".json_last_error()
编辑3:调用utf8_decode()
帖子标题导致以下内容:"校友?晚餐即将来临".这些数据是从MySQL数据库中提取的 - 特别是帖子标题是一个UTF-8编码的文本字段.也许这个单引号编码不正确?问题是,我有一个SQL GUI应用程序,它正确显示在那里.
讨论Scala时,类型系统始终被视为主要功能之一.它被称为强大的,并且是语言名字对象的主要原因(Scala是"可伸缩语言"的缩写).有人可以解释Scala键入的工作原理/为什么这个独特的,以及它如何有助于语言的可扩展性?
我有一个骨干应用程序,其视图结构如下所示 - 请注意,为了简洁,我删除了实现,模型,集合等:
NewsListView = Backbone.View.extend({
el: $('li#newspane'),
// This is what I would like to be able to do
// events: { 'filtered': 'reset' }
initialize: function() {
_.bindAll(this);
},
render: function() {
},
reset: function(){
}
});
FilterView = Backbone.View.extend({
el: $('li.filter'),
initialize: function() {
},
render: function() {
},
toggleFilter: function() {
}
});
AllView = Backbone.View.extend({
initialize: function() {
this.newsListView = new NewsListView();
this.filterView = new FilterView();
}
});
Run Code Online (Sandbox Code Playgroud)
从本质上讲,只要FilterView
的toggleFilter()
函数被调用,我想激发关闭称为事件filtered
像,然后由该抓什么 …
在Haskell中,我认为可以以这样的方式对类型进行别名,即编译器不允许别名类型和非混淆类型之间的引用.根据这个堆栈溢出问题,可以newtype
像这样使用Haskell :
newtype Feet = Feet Double
newtype Cm = Cm Double
Run Code Online (Sandbox Code Playgroud)
where Feet
和Cm
将表现为Double值,但尝试乘以Feet
值和Cm
值将导致编译器错误.
编辑:Ben在评论中指出,Haskell中的上述定义是不够的.Feet
并且Cm
将新的类型,其上不会有定义的功能.做了一些研究,我发现以下内容可行:
newtype Feet = Feet Double deriving (Num)
newtype Cm = Cm Double deriving (Num)
Run Code Online (Sandbox Code Playgroud)
这将创建一个从现有Num
类型派生的新类型(需要使用switch :) -XGeneralizedNewtypeDeriving
.当然,这些新类型会更有价值获得从其他类型,比如Show
,Eq
等等.但这是正确评价所需的最低Cm 7 * Cm 9
.
Haskell和Scala都有type
,它只是将现有类型别名化,并允许在Scala中使用无意义的代码,例如此示例:
type Feet = Double
type Cm = Double
val widthInFeet: Feet = 1.0
val widthInCm: Cm = …
Run Code Online (Sandbox Code Playgroud) 假设我们有一个递归数据结构,就像二叉树一样.有许多方法可以遍历它,它们具有不同的内存使用配置文件.例如,如果我们只是打印每个节点的值,使用伪代码,如下面的按顺序遍历...
visitNode(node) {
if (node == null) return;
visitNode(node.leftChild);
print(node.value);
visitNode(node.rightChild);
}
Run Code Online (Sandbox Code Playgroud)
...我们的内存使用量是常量,但由于递归调用,我们会增加调用堆栈的大小.在非常大的树上,这可能会溢出它.
假设我们决定针对调用堆栈大小进行优化; 假设这种语言能够进行适当的尾调,我们可以将其重写为以下预先遍历...
visitNode(node, nodes = []) {
if (node != null) {
print(node.value);
visitNode(nodes.head, nodes.tail + [node.left, node.right]);
} else if (node == null && nodes.length != 0 ) {
visitNode(nodes.head, nodes.tail);
} else return;
}
Run Code Online (Sandbox Code Playgroud)
虽然我们永远不会破坏堆栈,但我们现在看到堆使用量相对于树的大小线性增加.
假设我们当时试图懒洋洋地遍历树 - 这就是我的推理变得模糊的地方.我认为即使使用基本的懒惰评估策略,我们也会以与尾部优化版本相同的速度增长内存.下面是使用Scala的Stream类的具体示例,它提供了延迟评估:
sealed abstract class Node[A] {
def toStream: Stream[Node[A]]
def value: A
}
case class Fork[A](value: A, left: Node[A], right: Node[A]) extends Node[A] {
def toStream: Stream[Node[A]] = …
Run Code Online (Sandbox Code Playgroud) binary-tree haskell functional-programming scala data-structures
所以,我想使用一个java映射,其中键是一个对象......但它不是键入对象的值,而是键入对象ID.因此,类似下面的内容将是完全有效的代码:
Map<String, Integer> map = new HashMap<String, Integer>();
String s1 = "hi!";
String s2 = "hi!";
map.put(s1, 10);
map.put(s2, 47);
Run Code Online (Sandbox Code Playgroud)
这可能吗?有没有一种简单的方法可以在没有构建对象ID或类中过于繁琐的情况下执行此操作?基本上,我需要一种方法来将不断变化的值列表与给定对象相关联.对于具有相同值的对象,此值列表可能会有所不同,因此默认映射不起作用的原因.除了重构我的班级自己这样做(不是真的可以选择,考虑到时间)有什么我可以使用的吗?
谢谢.
编辑:更多信息.
上面的例子只是一个例子.我将使用它来实现统一成本搜索算法.对于使用此算法进行搜索的任何给定节点,还必须具有到目前为止所采用的路径.基于值的哈希映射不起作用的原因是该算法可以重复已经探索过的节点.在这一点上,路径会有所不同,尽管"我现在在哪里?"的价值.是相同的.
我想创建一个看起来像excel电子表格的背景.白色表格细胞,每个细胞周围的薄边框.我知道如何使用单个图像轻松完成此操作,并且我知道如何使用表格执行此操作...但如果可能的话,我希望在没有任何一个的情况下执行此操作.
每个单元格的大小将固定为20x20,所以我不必担心调整大小.有什么想法吗?我有一种熟悉的方法,涉及大量的内部标记,但我认为这几乎与使用表格一样糟糕.
此背景的目的是允许用户在网格上排列块.使用jQuery UI的拖放功能,我希望用户能够在受限制的网格中移动块.网格线只是简单地显示它们的块绑定到网格中的位置.http://jqueryui.com/demos/draggable/#snap-to提供了此网格捕捉(没有网格线)的示例
我知道Java并不真正使用精确的引用传递,而是通过引用副本传递.这就是为什么刚尝试交换引用的交换函数在Java中不起作用的原因.for-each循环是否也这样做?例如,给出以下代码......
for (Constraint c : getLeafNodes(constraintGraph)){
c = new Constraint();
}
Run Code Online (Sandbox Code Playgroud)
...我想通过一个递归定义的树状结构,找到所有叶子节点.每个叶节点都需要用新的空节点替换.这会做我期望的,还是只是将每个叶节点的引用副本设置为新节点?
我在另一段传递单元测试的代码上写了一个类似的方法,这让我觉得for-each循环使用引用,而不是引用副本,但我们的代码质量软件将此标记为局部变量的死存储,主要错误.
谢谢.
我正在修改现有的Web应用程序,该应用程序具有管理能够登录系统的用户的能力.通过对话框修改用户的详细信息时,更新数据将通过AJAX发送到服务器.然后返回几行javascript来更新当前页面以反映这些更改,以便执行.这让我感觉很糟糕 - 是不是执行远程获取的JS危险?
如果我要修改它,我会有AJAX调用发送更新的信息,然后调用另一个函数,通过AJAX从服务器获取最新数据(或者只是刷新页面,如果我感到懒惰).是否有任何优势(主要是安全性,但从架构角度来看)进行这种改变,还是我是肛门?