小编der*_*ert的帖子

Ruby:我可以编写没有连接的多行字符串吗?

有没有办法让这个看起来好一点?

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)

比如,有没有办法暗示连接?

ruby code-formatting

372
推荐指数
15
解决办法
32万
查看次数

-rpath和-L有什么区别?

gccld提供了许多方法来指定库的搜索路径 - 其中包括-rpath-L标志.这些联机帮助页显示这两个标志之间没有差异,有效地说每个标志都会向库搜索路径添加一个库.但两个旗帜完全相同的事情似乎很奇怪.这两个选项之间有什么区别?

linker gcc shared-libraries ld

78
推荐指数
1
解决办法
4万
查看次数

postgres中的Seq Scan和Bitmap堆扫描有什么区别?

在explain命令的输出中,我发现了两个术语'Seq Scan'和'Bitmap heap Scan'.有人能告诉我这两种类型的扫描有什么区别吗?(我正在使用PostgreSql)

postgresql optimization query-optimization sql-execution-plan

49
推荐指数
1
解决办法
2万
查看次数

在Ruby中将数组转换为索引哈希

我有一个数组,我想制作一个哈希,所以我可以快速问"数组中的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方式吗?

编辑1

不,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)

ruby arrays hash

42
推荐指数
6
解决办法
5万
查看次数

左上方的ascii值是多少?

箭头键的ASCII值是多少?(上下左右)

hardware ascii

40
推荐指数
6
解决办法
19万
查看次数

有没有一种简单的方法可以为一个glob设置nullglob

在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语法之外,还有吗?

bash glob shopt

21
推荐指数
3
解决办法
7142
查看次数

使用Lua进行Web开发?

如果我在Lua中开发Web应用程序,我会遇到什么问题或陷阱; 在开始之前我应该​​注意什么?

有开发Lua Web应用程序的经验吗?

lua

17
推荐指数
3
解决办法
1万
查看次数

轻松的脑力劳动者,更好的算法

这是在社区大学.我失败了,但想知道答案.

问题是这样的:你有一个代表图像的2D结构阵列.每个结构都有一个红色,绿色,蓝色和alpha值.可以有更多信息,但不是解决问题所必需的.

假设图像是4000x4000或1600万个元素.每个角落都需要更新/检查每个元素.

对于您需要的每个元素:

  • 如果<50或将设置为205> 205,则将红色字节设置为50
  • 使用rand()将绿色字节设置为0到255之间的随机值
  • 以"有趣"的方式修改蓝色.

"你不能蛮力,以更聪明的方式思考;你需要一个更好的算法"

我基本上做了一个循环.我是最快的,但他说这是"关于找到一个更好的算法,而不是使用可爱的编译器和指针技巧".

还需要在纯C中.没有OpenMP/Threads或OpenGL着色,OpenCL等......只有带有标准库的ANSI C(甚至禁止使用GNU/POSIX库).

我询问了按位操作,他说"那些在C [??]中非常昂贵,它是关于编写一个快速而可靠的算法,而不是你不断提出的这些可爱的技巧".

那有什么提示吗?

c algorithm

15
推荐指数
3
解决办法
769
查看次数

为什么`execvp`采用`char*const argv []`?

我想知道两个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)

c api exec

14
推荐指数
1
解决办法
1768
查看次数

如何在vim命令中扩展变量?

我试图在命令调用中扩展变量.这就是我的意思.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)

variables vim variable-expansion

13
推荐指数
1
解决办法
9654
查看次数