有没有办法让这个看起来好一点?
conn.exec 'select attr1, attr2, attr3, attr4, attr5, attr6, attr7 ' +
'from table1, table2, table3, etc, etc, etc, etc, etc, ' +
'where etc etc etc etc etc etc etc etc etc etc etc etc etc'
Run Code Online (Sandbox Code Playgroud)
比如,有没有办法暗示连接?
gcc并ld提供了许多方法来指定库的搜索路径 - 其中包括-rpath和-L标志.这些联机帮助页显示这两个标志之间没有差异,有效地说每个标志都会向库搜索路径添加一个库.但两个旗帜完全相同的事情似乎很奇怪.这两个选项之间有什么区别?
在explain命令的输出中,我发现了两个术语'Seq Scan'和'Bitmap heap Scan'.有人能告诉我这两种类型的扫描有什么区别吗?(我正在使用PostgreSql)
postgresql optimization query-optimization sql-execution-plan
我有一个数组,我想制作一个哈希,所以我可以快速问"数组中的X是什么?".
在perl中,有一种简单(快速)的方法:
my @array = qw( 1 2 3 );
my %hash;
@hash{@array} = undef;
Run Code Online (Sandbox Code Playgroud)
这会生成一个如下所示的哈希:
{
1 => undef,
2 => undef,
3 => undef,
}
Run Code Online (Sandbox Code Playgroud)
我在Ruby中提出的最好的是:
array = [1, 2, 3]
hash = Hash[array.map {|x| [x, nil]}]
Run Code Online (Sandbox Code Playgroud)
这使:
{1=>nil, 2=>nil, 3=>nil}
Run Code Online (Sandbox Code Playgroud)
有更好的Ruby方式吗?
不,Array.include?不是个好主意.它很慢.它在O(n)中进行查询而不是O(1).为简洁起见,我的示例数组有三个元素; 假设实际的有一百万个元素.我们做一点基准测试:
#!/usr/bin/ruby -w
require 'benchmark'
array = (1..1_000_000).to_a
hash = Hash[array.map {|x| [x, nil]}]
Benchmark.bm(15) do |x|
x.report("Array.include?") { 1000.times { array.include?(500_000) } }
x.report("Hash.include?") { 1000.times { hash.include?(500_000) } }
end …Run Code Online (Sandbox Code Playgroud) 在bash中,如果你这样做:
mkdir /tmp/empty
array=(/tmp/empty/*)
Run Code Online (Sandbox Code Playgroud)
你发现array现在有一个元素"/tmp/empty/*",而不是你想要的零.值得庆幸的是,可以使用打开nullglob shell选项来避免这种情况shopt -s nullglob
但是nullglob是全局的,当编辑现有的shell脚本时,可能会破坏一些东西(例如,是否有人检查退出代码ls foo*以检查是否存在以"foo"开头的文件?).因此,理想情况下,我只想在小范围内启用它 - 理想情况下,一个文件名扩展.您可以使用它再次关闭shopt -u nullglob但当然只有在之前禁用它时:
old_nullglob=$(shopt -p | grep 'nullglob$')
shopt -s nullglob
array=(/tmp/empty/*)
eval "$old_nullglob"
unset -v old_nullglob
Run Code Online (Sandbox Code Playgroud)
让我觉得必须有一个更好的方法.明显的"把它放在子shell中"不起作用,因为变量赋值与子shell一起消失.除了等待Austin组导入ksh93语法之外,还有吗?
这是在社区大学.我失败了,但想知道答案.
问题是这样的:你有一个代表图像的2D结构阵列.每个结构都有一个红色,绿色,蓝色和alpha值.可以有更多信息,但不是解决问题所必需的.
假设图像是4000x4000或1600万个元素.每个角落都需要更新/检查每个元素.
对于您需要的每个元素:
"你不能蛮力,以更聪明的方式思考;你需要一个更好的算法"
我基本上做了一个循环.我是最快的,但他说这是"关于找到一个更好的算法,而不是使用可爱的编译器和指针技巧".
还需要在纯C中.没有OpenMP/Threads或OpenGL着色,OpenCL等......只有带有标准库的ANSI C(甚至禁止使用GNU/POSIX库).
我询问了按位操作,他说"那些在C [??]中非常昂贵,它是关于编写一个快速而可靠的算法,而不是你不断提出的这些可爱的技巧".
那有什么提示吗?
我想知道两个exec函数之间是否存在不同的原因const,如果这只是Single Unix Spec中的一个错误:
摘自Linux手册页,它似乎与Single Unix Specification一致,这里有两个版本exec:
int execlp(const char *file, const char *arg, ...);
int execvp(const char *file, char *const argv[]);
execlp将其参数视为const char *,并且它需要两个或更多.const在C中是一个承诺,函数不会改变指向的数据,在这种情况下是char构成字符串的实际字符().
execvp而是将其参数作为指针数组.但是,不是指向const char *你想要的指针数组,const关键字在不同的位置 - 这对C execvp来说很重要,它说它可能会修改字符串中的字符,但它承诺不会修改数组 - 即指向字符串的指针.所以,换句话说,
int fake_execvp(const char *file, char *const argv[]) {
argv[0] = "some other string"; /* this is an error */
argv[0][0] = 'f'; …Run Code Online (Sandbox Code Playgroud) 我试图在命令调用中扩展变量.这就是我的意思.vimrc:
command! -nargs=1 -complete=dir TlAddPm call s:TlAddPm(<f-args>)
function! s:TlAddPm(dir)
let flist = system("find " . shellescape(a:dir) . " -type f -name '*.pm' | sort")
TlistAddFiles `=flist`
endfun
Run Code Online (Sandbox Code Playgroud)
在:提示符下,`=flist`语法似乎起作用(或者,至少它使用w:变量),但在.vimrc文件中它没有--TlistAddFiles只是传递字符串`=flist`.
感谢Andrew Barnett和Mykola Golubyev的回答,我现在得到了这个,这似乎有效.有没有更好的方法?
command! -nargs=1 -complete=dir TlAddPm call s:TlAddPm(<f-args>)
function! s:TlAddPm(dir)
let findres = system("find " . shellescape(a:dir) . " -type f -name '*.pm' | sort")
let flist = []
for w in split(findres, '\n')
let flist += [ fnameescape(w) …Run Code Online (Sandbox Code Playgroud)