特定
scala> val a = (1 to 9).toArray
a: Array[Int] = Array(1, 2, 3, 4, 5, 6, 7, 8, 9)
Run Code Online (Sandbox Code Playgroud)
想以a这种方式分组元素,
Array(Array(1,2,3), Array(4,5,6), Array(7,8,9))
Run Code Online (Sandbox Code Playgroud) 在一次调用中map我们构造一个元组集合,例如像这样,
val a = (1 to 5).map { x => (x, x*10) }
a: Vector((1,10), (2,20), (3,30), (4,40), (5,50))
Run Code Online (Sandbox Code Playgroud)
然后我们将第一个和第二个元素提取到两个独立的,不可变的集合中
val b1 = a.map {_._1}
b1: Vector(1, 2, 3, 4, 5)
val b2 = a.map {_._2}
b2: Vector(10, 20, 30, 40, 50)
Run Code Online (Sandbox Code Playgroud)
如何获取b1并b2通过迭代初始集合一次,
val (b1,b2) = (1 to 5).map { x => /* ??? */ }
Run Code Online (Sandbox Code Playgroud) 例如,对于List(1, 1, 1, 2, 3, 3, 4)这将是Set(1, 3),因为1和3是唯一的元件,其发生多次.
要估算Pi的值,请考虑采用一种随机方法,该方法将随机值填充到数组中并测试单位圆的包含性,
import random as rd
import numpy as np
def r(_): return rd.random()
def np_pi(n):
v_r = np.vectorize(r)
x = v_r(np.zeros(n))
y = v_r(np.zeros(n))
return sum (x*x + y*y <= 1) * 4. / n
Run Code Online (Sandbox Code Playgroud)
注意,随机数的生成依赖于Python标准库;考虑通过numpy随机生成,
def np_pi(n):
x = np.random.random(n)
y = np.random.random(n)
return sum (x*x + y*y <= 1) * 4. / n
Run Code Online (Sandbox Code Playgroud)
现在考虑非矢量化方法,
import random as rd
def dart_board():
x,y = rd.random(), rd.random()
return (x*x + y*y <= 1)
def pi(n):
s = sum([dart_board() for _ in …Run Code Online (Sandbox Code Playgroud) 对于像这样的段落
<p> This is an exaMPLe </p>
Run Code Online (Sandbox Code Playgroud)
如何使用Javascript突出显示不同颜色的小写字母?
我有一个列表val l=List(4,3,2,1),我正在尝试生成格式的元组列表,(4,3), (4,2)依此类推.
这是我到目前为止所拥有的:
for (i1<-0 to l.length-1;i2<-i1+1 to l.length-1) yield (l(i1),l(i2))
输出是: Vector((4,3), (4,2), (4,1), (3,2), (3,1), (2,1))
两个问题:
它生成一个Vector,而不是一个List.这两者有何不同?
这是这样idiomatic scala做的方式吗?我对Scala很新,所以对我来说,我学得很对.
我有一个类Edge(如图中所示),具有以下签名.
class Edge(b1: Block, b2: Block, var id: Int, arity: Int)
Run Code Online (Sandbox Code Playgroud)
Block 是一个阶级 - 它做什么,没有意思.
现在,已经s有一些包含一些提供源和目标的对象.我现在想给这些边一个连续的id(从1开始,下一个块应该得到2,依此类推......).
我目前通过首先给所有1作为id来做到这一点,然后我运行一个createLabels重新分配标签的函数(见下文).
val edges = s map { x => new Edge(x.getSrcBlock, x.getDstBlock, 1, getArity(x))}
def createLabels: Unit = {
var i: Int = 0
for(e <- edges) {
e.id = i
i = i+1
}
}
Run Code Online (Sandbox Code Playgroud)
但是,我不喜欢这个解决方案,因为我想避免这些变量,它是程序风格而不是功能风格.你能给我一个提示,我怎样才能做得更好?
我有这门课MyClass:
abstract class MyClass { def myMethod: A => B }
object MyClass {
def apply(dep: A => B)(f: B => B) = new MyClass{ def myMethod = ????? }
}
Run Code Online (Sandbox Code Playgroud)
在apply方法内部,我想定义myMethod组合f和dep功能f(dep).我怎样才能做到这一点?
我需要将数据拆分成列.空白空间必须分布在最终列中.因此,如果我有四个元素和三列,则列将具有以下数量的元素:2,1和1.
我需要知道有多少列已满.答案是:
val full = data.length % NUMBER_OF_COLUMNS
Run Code Online (Sandbox Code Playgroud)
问题是项目数是列数的倍数,这将返回零,这不是我想要的.所以我能做到:
val full = if (data.length % NUMBER_OF_COLUMNS == 0) NUMBER_OF_COLUMNS else
data.length % NUMBER_OF_COLUMNS
Run Code Online (Sandbox Code Playgroud)
这有效,但感觉不像"Scala一样".这绝对是冗长而笨拙的,其余操作需要存储或执行两次.(在这里,我选择了后一种选择.)
有没有更好的办法?
在Python中,我所做的基本上是使用or运算符Int,如下所示:
full = len(data) % NUMBER_OF_COLUMNS or NUMBER_OF_COLUMNS
Run Code Online (Sandbox Code Playgroud)
完成.但我不能想到Scala中有类似的东西.它不存在还是我根本没有看到它?
我正在尝试Zipwith在Haskell中编写该函数.
如果我使用以下值运行它,它应该返回以下结果:
Prelude> zipWith (+) [10,20,30] [33,44,94]
[43,64,124]
Run Code Online (Sandbox Code Playgroud)
到目前为止我的代码是:
Zipwith f [] [] = []
Zipwith f [] _ = []
Zipwith f _ [] = []
Zipwith f (x:xs) (y:ys) = (f x y) : (Zipwith f xs ys)
Run Code Online (Sandbox Code Playgroud)
但是,编译器告诉我,我有多个函数,all Zipwith,没有数据定义,但我认为在Haskell中没有必要.此外,它说我有f的多个声明,但它只是一个参数,我认为参数有多个定义并不重要.
有什么想法吗?