当要选择的元素数 (n) 为 5 并且选择的元素数 (r) 为 3 时,没有重复的组合如下所示:
0 1 2
0 1 3
0 1 4
0 2 3
0 2 4
0 3 4
1 2 3
1 2 4
1 3 4
2 3 4
Run Code Online (Sandbox Code Playgroud)
随着 n 和 r 的增长,组合的数量很快就会变大。对于 (n,r) = (200,4),组合数为 64684950。
使用 r 个嵌套的 for 循环迭代列表很容易,其中每个 for 循环的初始迭代值大于其嵌套的 for 循环的当前迭代值,如以下 jsfiddle 示例所示:https: // dotnetfiddle.net/wHWK5o
我想要的是一个根据其索引仅计算一种组合的函数。像这样的东西:
tuple combination(i,n,r) {
return [combination with index i, when the number of elements to choose from is n …Run Code Online (Sandbox Code Playgroud) 我正在使用一个SQLite3数据库我WAL模式.pragma语句同步的默认模式是2(完整),但这使得插入非常慢并且根据文档 1(正常)应该没问题.
只要数据库处于打开状态,更改同步模式就会起作用,但在连接结束时似乎会重置:
root@linux:~# sqlite3 mydb.db
SQLite version 3.8.6 2014-08-15 11:46:33
sqlite> pragma synchronous;
2
sqlite> pragma synchronous=1;
sqlite> pragma synchronous;
1
sqlite>[exit]
root@linux:~# sqlite3 mydb.db
SQLite version 3.8.6 2014-08-15 11:46:33
sqlite> pragma synchronous;
2
Run Code Online (Sandbox Code Playgroud)
没有其他人在使用数据库.任何人都可以告诉我如何使这种变化持久吗?
另外,设置pragma synchronous和pragma [database name].synchronous?有什么区别?顺便说一下,两者都不是持久的.
interweb上有一百万个示例,详细说明了使用sqlite3_exec从表中选择行并使用此回调函数打印它们:
static int callback(void *NotUsed, int argc, char **argv, char **azColName){
int i;
for(i=0; i<argc; i++){
printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL");
}
printf("\n");
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这是实现的代码callback:
[...]
rc = sqlite3_exec(db, sql, callback, &nrecs, &zErrMsg);
[...]
Run Code Online (Sandbox Code Playgroud)
现在,我认为将获取的数据用于除打印之外的其他内容将是一个相当标准的场景,但对于我的生活,我无法找到应该如何实现.
我想要做的是获取argc包含两列的一行(将是1),argv[0]并argv[1]从sqlite3_exec执行的位置访问这两个值(和).
我想这与这个问题有关void *NotUsed.(世界上这是一个指针,为什么所有的例子都坚持不使用它?)
如果有人可以帮助我,我会非常感激.如果你还能向我解释为什么这个看似微不足道的任务变得如此复杂,你将拥有我永恒的爱.(获取的数据在从另一个函数调用的静态函数中处理.这有效地杀死了使用面向对象语言的目的,对吧?)
是否可以对考虑第二列内容的列进行求和?
我想要的是第二个陈述:
SELECT * FROM theTable;
+------------+-------------+
| type | value |
+------------+-------------+
| plusitive | 11 |
+------------+-------------+
| negative | 7 |
+------------+-------------+
| negative | 3 |
+------------+-------------+
SELECT SUM_BASED_ON_WHETHER_type_IS_plusitive_OR_negative(value) FROM theTable;
+----------------------------------------------------------------+
| SUM_BASED_ON_WHETHER_type_IS_plusitive_OR_negative(value) |
+----------------------------------------------------------------+
| 1 |
+----------------------------------------------------------------+
Run Code Online (Sandbox Code Playgroud)
所以字符串'plusitive'表示乘法值为1,'negative'表示在加到sum之前乘以-1的乘法值.
谁知道怎么做?我知道表格布局不是最佳的任务,但改变它不是一个选项.解决方案将在存储过程中实现.