小编elm*_*elm的帖子

在Scala中如何对数组中的连续元素进行分组

特定

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)

arrays scala

3
推荐指数
1
解决办法
2421
查看次数

集合的Scala元组而不是元组的集合

在一次调用中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)

如何获取b1b2通过迭代初始集合一次,

val (b1,b2) = (1 to 5).map { x => /* ??? */ }
Run Code Online (Sandbox Code Playgroud)

scala tuples scala-collections

3
推荐指数
1
解决办法
179
查看次数

如何获取Scala中列表中多次出现的所有元素集?

例如,对于List(1, 1, 1, 2, 3, 3, 4)这将是Set(1, 3),因为1和3是唯一的元件,其发生多次.

scala list set scala-collections

3
推荐指数
2
解决办法
178
查看次数

用于基于Monte Carlo的Pi计算的Python有效矢量化

要估算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)

python pi numpy vectorization montecarlo

3
推荐指数
1
解决办法
1482
查看次数

如何用JavaScript突出显示小写字母?

对于像这样的段落

<p> This is an exaMPLe </p>
Run Code Online (Sandbox Code Playgroud)

如何使用Javascript突出显示不同颜色的小写字母?

html javascript html5

3
推荐指数
1
解决办法
153
查看次数

scala:从列表中生成元组

我有一个列表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))

两个问题:

  1. 它生成一个Vector,而不是一个List.这两者有何不同?

  2. 这是这样idiomatic scala做的方式吗?我对Scala很新,所以对我来说,我学得很对.

functional-programming scala list

3
推荐指数
1
解决办法
405
查看次数

Scala:集合中的连续id

我有一个类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)

但是,我不喜欢这个解决方案,因为我想避免这些变量,它是程序风格而不是功能风格.你能给我一个提示,我怎样才能做得更好?

functional-programming scala set

3
推荐指数
1
解决办法
86
查看次数

定义组合其他一阶函数的一阶函数

我有这门课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组合fdep功能f(dep).我怎样才能做到这一点?

scala

3
推荐指数
1
解决办法
71
查看次数

在Scala中使用带有Int的"或"运算符

我需要将数据拆分成列.空白空间必须分布在最终列中.因此,如果我有四个元素和三列,则列将具有以下数量的元素: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中有类似的东西.它不存在还是我根本没有看到它?

scala

3
推荐指数
1
解决办法
92
查看次数

在Haskell中写Zipwith

我正在尝试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的多个声明,但它只是一个参数,我认为参数有多个定义并不重要.

有什么想法吗?

haskell

3
推荐指数
2
解决办法
2118
查看次数