我想在Scala中使用漂亮的单行迭代迭代值列表.
例如,这个效果很好:
scala> val x = List(1,2,3,4)
x: List[Int] = List(1, 2, 3, 4)
scala> x foreach println
1
2
3
4
Run Code Online (Sandbox Code Playgroud)
但是,如果我使用占位符_,它会给我一个错误:
scala> x foreach println(_ + 1)
<console>:6: error: missing parameter type for expanded function ((x$1) =>x$1.$plus(1))
x foreach println(_ + 1)
^
Run Code Online (Sandbox Code Playgroud)
这是为什么?这里不能编译推断类型?
基本上,我需要从序列中查询大约一千个NEXTVAL.我可以在一个循环中查询它们,或者我可以通过一个带有reeeeeally大表的连接来查询它们.
有没有更少的hacky方式?
UPD. 基本上,我有一个对象操作的时间表.每个对象都有一个生成的UUID或来自数据库的ID.在计算出最佳计划后,我需要将其写入DB,但表中的每个ID都来自一个序列.所以我需要查询该序列中的一些ID.问题是循环查询很慢,因为数据库离我很远,而且我不能在循环中执行数十个查询时松散几秒钟.所以我需要在一个查询中查询所有这些新ID.
我正在尝试找到一种有效的算法来生成具有给定稀疏性的简单连通图.就像是:
Input:
N - size of generated graph
S - sparseness (numer of edges actually; from N-1 to N(N-1)/2)
Output:
simple connected graph G(v,e) with N vertices and S edges
Run Code Online (Sandbox Code Playgroud) 我实现了一个简单的方法来生成笛卡尔积,Seq如下所示:
object RichSeq {
implicit def toRichSeq[T](s: Seq[T]) = new RichSeq[T](s)
}
class RichSeq[T](s: Seq[T]) {
import RichSeq._
def cartesian(ss: Seq[Seq[T]]): Seq[Seq[T]] = {
ss.toList match {
case Nil => Seq(s)
case s2 :: Nil => {
for (e <- s) yield s2.map(e2 => Seq(e, e2))
}.flatten
case s2 :: tail => {
for (e <- s) yield s2.cartesian(tail).map(seq => e +: seq)
}.flatten
}
}
}
Run Code Online (Sandbox Code Playgroud)
显然,这个很慢,因为它一次计算整个产品.有人在Scala中为这个问题实现了一个懒惰的解决方案吗?
UPD
好的,所以我在笛卡尔积上实现了一个非常愚蠢但是工作的迭代器版本.在这里发布给未来的爱好者:
object RichSeq {
implicit def toRichSeq[T](s: Seq[T]) = …Run Code Online (Sandbox Code Playgroud) 为什么所有scala vararg方法,当从java中使用时,似乎接受Seq变量,并且不能用作java本机vararg方法.这是一个错误吗?
例如,Buffer有方法def append(elems: A*): Unit.但在java中它有另一个签名:void append(Seq<A>).
我正在寻找一种方法来实现图像缩放和滚动它在Droid Comic Viewer中的实现方式.有没有快速的方法呢?如果没有,那么你能不能给出一些建议,至少在实施动力学滚动方面.
所以这就是问题所在.我在ImageView中显示一个大图像,需要找到它相对于图像的位置.像这样:
?????????????????????????????????
? Image ?
???>??????????????? ?
? ? ImageView ? ?
? ? ? ?
? ??????????????? ?
? ?
? ?
?????????????????????????????????
Run Code Online (Sandbox Code Playgroud)
有帮助吗?
UPD:由于存在一些误解,我将详细解释这个问题.
我有一张图片.实际上是一个位图.我在具有CENTER缩放类型的ImageView中显示它.假设图像比ImageView大,因此只显示图像的一部分.我想找到这部分相对于整个图像的位置.
我想对序列进行排序和/或过滤.基本上是这样的:
var result = getReallyLongSeq() // returns Seq[SomeClass]
if (doFilter) {
result = result.filter( ... )
}
if (doSort) {
result = result.sortWith( ... )
}
Run Code Online (Sandbox Code Playgroud)
现在,这是一种明显有效的方法,但是有更实用的方法吗?
我使用node-oracle连接到Oracle数据库.
当我从带有西里尔数据的表中选择值时,一切都很好,但如果我调用这样的procudure:
CREATE OR REPLACE PROCEDURE TEST_ENCODING (CUR OUT SYS_REFCURSOR) AS
BEGIN
open cur for
select '????' as hello from dual; -- cyrillic hardcoded text
END TEST_ENCODING;
Run Code Online (Sandbox Code Playgroud)
然后从节点调用它:
connection.execute("call TEST_ENCODING(:1)", [new oracle.OutParam(oracle.OCCICURSOR)],
function (err, result) {
console.log(result)
}
);
Run Code Online (Sandbox Code Playgroud)
结果是:( [ { HELLO: '??' } ]字符串被切成两半).
数据库配置如下:
NLS_LANGUAGE AMERICAN
NLS_TERRITORY AMERICA
NLS_CURRENCY $
NLS_ISO_CURRENCY AMERICA
NLS_NUMERIC_CHARACTERS .,
NLS_CHARACTERSET CL8MSWIN1251
NLS_CALENDAR GREGORIAN
NLS_DATE_FORMAT DD-MON-RR
NLS_DATE_LANGUAGE AMERICAN
NLS_SORT BINARY
NLS_TIME_FORMAT HH.MI.SSXFF AM
NLS_TIMESTAMP_FORMAT DD-MON-RR HH.MI.SSXFF AM
NLS_TIME_TZ_FORMAT HH.MI.SSXFF AM TZR
NLS_TIMESTAMP_TZ_FORMAT …Run Code Online (Sandbox Code Playgroud) Scala集合有一堆可读,几乎可读的运营商如中:+和+:,但为什么没有任何人类可读的同义词样append?