我有以下代码,它增加了向量中每对的第一个元素:
(vec (map (fn [[key value]] [(inc key) value]) [[0 :a] [1 :b]]))
Run Code Online (Sandbox Code Playgroud)
但是我担心这个代码不够优雅,因为它首先使用map创建一个序列,然后将其转换回矢量.
考虑这个类比:
(into [] (map (fn [[key value]] [(inc key) value]) [[0 :a] [1 :b]]))
Run Code Online (Sandbox Code Playgroud)
在#clojure@irc.freenode.net上有人告诉我,使用上面的代码是不好的,因为into扩展到了(reduce conj [] (map-indexed ...)),在这个过程中产生了许多中间对象.然后我被告知实际上into并没有扩展到(reduce conj ...)可能的时候使用瞬态.同时测量经过的时间显示into实际上比...更快vec.
所以我的问题是:
map矢量的正确方法是什么?vec和into向量时,下面会发生什么?相关但不重复的问题:
我实际上很惊讶我无法在这里找到答案,尽管我可能只是使用了错误的搜索词或其他东西。我能找到的最接近的是this,但他们询问生成double具有特定步长的特定范围的s ,答案是这样处理的。我需要一些可以生成具有任意开始、结束和步长的数字的东西。
我算起来也有是在图书馆这样的一些方法已经某处,但如果让我无法轻松地找到它(再次,也许我只是用错了搜索词或某事)。所以这是我在过去几分钟里自己做的事情:
import java.lang.Math;
import java.util.List;
import java.util.ArrayList;
public class DoubleSequenceGenerator {
/**
* Generates a List of Double values beginning with `start` and ending with
* the last step from `start` which includes the provided `end` value.
**/
public static List<Double> generateSequence(double start, double end, double step) {
Double numValues = (end-start)/step + 1.0;
List<Double> sequence = new ArrayList<Double>(numValues.intValue());
sequence.add(start);
for (int i=1; i < numValues; i++) {
sequence.add(start + step*i);
} …Run Code Online (Sandbox Code Playgroud) 在Oracle中,有一种生成序列号的机制,例如:
CREATE SEQUENCE supplier_seq
MINVALUE 1
MAXVALUE 999999999999999999999999999
START WITH 1
INCREMENT BY 1
CACHE 20;
Run Code Online (Sandbox Code Playgroud)
然后执行该语句
supplier_seq.nextval
Run Code Online (Sandbox Code Playgroud)
检索下一个序列号.
您将如何在MS SQL Server中创建相同的功能?
编辑:我不是在寻找自动生成表记录密钥的方法.我需要生成一个唯一值,我可以将其用作进程的(逻辑)ID.所以我需要Oracle提供的确切功能.
(免责声明 - 我知道Seqs在Clojure中的重要性)
在常见的lisp中,cons函数可用于将两个符号组合成一个列表:
(def s 'x)
(def l 'y)
(cons s l)
Run Code Online (Sandbox Code Playgroud)
在clojure中 - 你只能使用一个序列 - 缺点还没有扩展到使用两个符号.所以你必须写:
(def s 'x)
(def l 'y)
(cons s '(l))
Run Code Online (Sandbox Code Playgroud)
在Clojure中有更高级别的模式可以解释Common LISP和Clojure之间的这种差异吗?
如何创建一个序列,其中START WITH值来自查询?
我正在尝试这种方式:
CREATE SEQUENCE "Seq" INCREMENT BY 1 START WITH (SELECT MAX("ID") FROM "Table");
但是,我收到ORA-01722错误
我在java中有一个测试类,有几个@Test注释的方法,不知何故,我想在方法B之前运行方法A,当我运行整个测试时.有可能还是必要的?
只是一个简单的例子:如果我想在postgres中创建一个带有自动填充id的表,我运行这个sql:
CREATE SEQUENCE person_id_seq START 1;
CREATE TABLE person (
id integer PRIMARY KEY DEFAULT nextval('person_id_seq'),
name varchar(100) NOT NULL
);
Run Code Online (Sandbox Code Playgroud)
在学说中我设置了所有财产
class Person {
/**
* @Id
* @Column(type="integer", nullable=false)
* @GeneratedValue(strategy="SEQUENCE")
* @SequenceGenerator(sequenceName="person_id_seq", initialValue=1, allocationSize=100)
*/
private $id;
Run Code Online (Sandbox Code Playgroud)
但是当我生成sql(php doctrine orm:schema-tool:create --dump-sql)时,我得到了它:
CREATE TABLE person (
id INT NOT NULL,
name VARCHAR(100) NOT NULL
);
CREATE SEQUENCE person_id_seq INCREMENT BY 100 MINVALUE 1 START 1
Run Code Online (Sandbox Code Playgroud)
但不要将其设置为默认值
\ d人
Column | Type | Modifiers
-------------------+--------------------------------+-----------
id | integer | …Run Code Online (Sandbox Code Playgroud) 我在这个主题上发现了其他一些问题.这个...
...... 手册似乎表明你可以随时打电话lastval(),它会按预期工作.但这一个......
Postgresql和PHP:在多用户应用程序中,currval是一种检索最后一行插入id的有效方法吗?
......似乎表明它必须在交易中.所以我的问题是这样的:我可以在查询之前等待我喜欢的lastval()(没有交易)吗?面对许多并发连接,这是可靠的吗?
什么是sequenceScala中的Haskell ?我想将选项列表转换为列表选项.它应该像None任何选项一样出现None.
List(Some(1), None, Some(2)).??? --> None
List(Some(1), Some(2), Some(3)).??? --> Some(List(1, 2, 3))
Run Code Online (Sandbox Code Playgroud) 我有一个零和一元组,例如:
(1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1)
Run Code Online (Sandbox Code Playgroud)
事实证明:
(1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1) == (1, 0, 1, 1) * 3
Run Code Online (Sandbox Code Playgroud)
我想要一个函数f,使得if s是一个零和一的非空元组,f(s)是最短的子元素r,s == r * n对于某些正整数n.
所以,例如,
f( (1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1) ) == (1, 0, 1, 1)
Run Code Online (Sandbox Code Playgroud)
f在Python中编写函数的方法是什么?
编辑:
我目前使用的天真方法
def f(s):
for i in range(1,len(s)): …Run Code Online (Sandbox Code Playgroud)