这有点困扰我一段时间了.在学习Python之前我学习了Haskell,所以我一直喜欢将许多计算作为映射到列表中.这是由列表理解精美表达的(我在这里给出了pythonic版本):
result = [ f(x) for x in list ]
Run Code Online (Sandbox Code Playgroud)
但在许多情况下,我们希望在x上执行多个语句,例如:
result = [ f(g(h(x))) for x in list ]
Run Code Online (Sandbox Code Playgroud)
这很快变得笨重,难以阅读.
我的正常解决方案是将其扩展回for循环:
result = []
for x in list:
x0 = h(x)
x1 = g(x0)
x2 = f(x1)
result.append(x2)
Run Code Online (Sandbox Code Playgroud)
关于这一点困扰我的一件事就是不得不初始化空列表'结果'.这是一个微不足道的事情,但它让我感到不快.我想知道是否有任何替代等效形式.一种方法可能是使用本地函数(这是他们在Python中调用的吗?)
def operation(x):
x0 = h(x)
x1 = g(x0)
x2 = f(x1)
return x2
result = [ operation(x) for x in list ]
Run Code Online (Sandbox Code Playgroud)
上述两种形式中的任何一种都有什么特别的优点/缺点吗?或者是否有更优雅的方式?
是否有(Unix)shell脚本以人类可读的形式格式化JSON?
基本上,我希望它改变以下内容:
{ "foo": "lorem", "bar": "ipsum" }
Run Code Online (Sandbox Code Playgroud)
...进入这样的事情:
{
"foo": "lorem",
"bar": "ipsum"
}
Run Code Online (Sandbox Code Playgroud) 我可以在托管代码中分配的最小内存量是一个字节吗?
我是否正确理解布尔变量占用的内存远多于一点?
有没有办法让我在.net中以小于一个字节的块分配内存?
我最近一直在努力学习更多,并且通常测试Java的工作和个人项目的序列化,我必须说我越了解它,我就越不喜欢它.这可能是由错误的信息造成的,所以这就是为什么我要问你们这两件事:
1:在字节级别,序列化如何知道如何将序列化值与某些类匹配?
我在这里的一个问题是我用ArrayList进行了一个小测试,其中包含值"one","two","three".在序列化之后,字节数组占用了78个字节,这对于如此少量的信息(19 + 3 + 3 + 4字节)来说似乎非常多.当然,这肯定会有一些开销,但这导致了我的第二个问题:
2:序列化可以被认为是持久化对象的好方法吗?现在很明显,如果我使用一些自制的XML格式,持久性数据将是这样的
<object>
<class="java.util.ArrayList">
<!-- Object array inside Arraylist is called elementData -->
<field name="elementData">
<value>One</value>
<value>Two</value>
<value>Three</value>
</field>
</object>
Run Code Online (Sandbox Code Playgroud)
与XML一般来说,它有点膨胀,占用138个字节(没有空格,即).JSON中也是如此
{
"java.util.ArrayList": {
"elementData": [
"one",
"two",
"three"
]
}
}
Run Code Online (Sandbox Code Playgroud)
这是75字节所以已经比Java的序列化略小.使用这些基于文本的格式,显然必须有一种方法可以将基本数据表示为文本,数字或两者的任意组合.
那么回顾一下,序列化如何在字节/位级别上工作,何时应该使用以及何时不应该使用序列化以及序列化的真正好处除了它是Java的标准之外?
我在后面的视图代码中使用命名空间,但我无法在aspx中调用此名称空间的任何类.
在codebehind中:
using MVCTest.Controller;
Run Code Online (Sandbox Code Playgroud) 是否可以访问iPhone/iPod touch上的日历条目,即阅读,创建,更改,删除约会?
我搜索了iPhone SDK文档但没有找到任何内容.也许我错过了什么.
我想知道在STL中是否有一个迭代器在返回之前取消引用指向的对象.在操作聚合指针的容器时,这可能非常有用.以下是我希望能够做到的一个例子:
#include <vector>
#include <iterator>
#include <algorithm>
using namespace std;
int main()
{
vector<int*> vec;
int i = 1;
int j = 2;
int k = 3;
vec.push_back(&i);
vec.push_back(&j);
vec.push_back(&k);
copy(deref_iterator(vec.begin()),
deref_iterator(vec.end()),
ostream_iterator<int>(cout, " ")); // prints "1 2 3"
return 0;
}
Run Code Online (Sandbox Code Playgroud) python ×2
.net ×1
asp.net-mvc ×1
c# ×1
c#-7.0 ×1
c++ ×1
cocoa-touch ×1
coding-style ×1
command-line ×1
django ×1
format ×1
idioms ×1
iphone ×1
iterator ×1
java ×1
json ×1
memory ×1
middleware ×1
pretty-print ×1
stl ×1
unix ×1