小编pyt*_*tor的帖子

在一个语句中执行映射查找和类型断言是"糟糕的形式"吗?

我刚刚意识到可以在一个语句中进行映射查找和类型/接口断言.

m := map[string]interface{}{
    "key": "the value",
}
if value, ok := m["key"].(string); ok {
    fmt.Printf("value exists and is a string: %s\n", value)
} else {
    fmt.Println("value does not exist or is not a string")
}
Run Code Online (Sandbox Code Playgroud)

这被认为是坏事吗?我没有看到任何官方文件评论这一点.

编辑:我知道这段代码无法区分"密钥不存在"和"值是不正确的类型".

edit2:ahem,else子句中的print是不正确的:(

dictionary idiomatic go type-assertion

8
推荐指数
1
解决办法
253
查看次数

如何在rethinkdb中过滤数组大小?

我有一张桌子,桌子上有一堆文件,这些文件会定期(部分)进行更新。

我本质上想做的是创建另一个表(changes以下称为表),该表存储每个文档的最新N个更改。

因此table.changes(),我要做的是获取表上的所有更改,计算所需的diff信息(diffentry在下面称为),然后将该信息添加到另一个表中的数组中:

changes.get(doc_id).update({
    'diffs': R.row['changes'].prepend(diffentry)
}).run()
Run Code Online (Sandbox Code Playgroud)

这个棘手的地方是如何限制diffs数组的大小?

有一个delete_at()可以从数组中删除一个或多个项目的数组方法,我可以 “蛮力”调用,例如:

delete_at(diff_limit, diff_limit + 10000)
Run Code Online (Sandbox Code Playgroud)

并忽略任何错误(疯狂的上限只是偏执狂)。但这有点脏...

我认为更好,更好的方法是对大于限制的数组进行过滤并删除多余的位。伪:

changes.get(doc_id).filter(R.row['diffs'].length > diff_limit).update({
    'diffs': R.row['diffs'].delete_at(diff_limit, R.row['diffs'].length - 1)
}).run()
Run Code Online (Sandbox Code Playgroud)

但是,可惜,length我还没有发现……关于如何以一种不错的方式来做这种事情的任何想法?

arrays rethinkdb rethinkdb-python

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