如何展平任何深度的嵌套数组?
例如
val in = Array( 1, Array(2,3), 4, Array(Array(5)) )
Run Code Online (Sandbox Code Playgroud)
会被夷为平地
val out = Array(1,2,3,4,5)
Run Code Online (Sandbox Code Playgroud)
提前致谢.
让一个不可变的地图
val m = (0 to 3).map {x => (x,x*10) }.toMap
m: scala.collection.immutable.Map[Int,Int] = Map(0 -> 0, 1 -> 10, 2 -> 20, 3 -> 30)
Run Code Online (Sandbox Code Playgroud)
一系列感兴趣的钥匙
val k = Set(0,2)
Run Code Online (Sandbox Code Playgroud)
和一个功能
def f(i:Int) = i + 1
Run Code Online (Sandbox Code Playgroud)
如何应用于f感兴趣的键映射的映射中的值,以便生成映射
Map(0 -> 1, 1 -> 10, 2 -> 21, 3 -> 30)
Run Code Online (Sandbox Code Playgroud) 我想知道是否有办法在列表中找到一个元素并将其移动到Scala列表的前面?有没有什么简单的方法可以做到这一点,除了迭代列表,然后删除该元素,然后将其预先挂起到列表的前面?
我有一个Array[Array[Float]]保证所有内部数组长度相同的.我想在所有内部数组上执行元素加法.
让我用一个具体的例子说明这一点.假设我的Array包含三个由七个Floats组成的Arrays,其值如下:
Array[Array[Float]] = Array(
Array(0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0),
Array(1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0),
Array(0.0, 1.0, 0.0, 1.0, 0.0, 1.0, 0.0)
)
Run Code Online (Sandbox Code Playgroud)
现在我想将其转换为大小为7的数组,其中第n个元素是我输入中第n个元素的总和Array.对于我的示例输入,输出将是:
Array[Float] = Array(1.0, 3.0, 3.0, 5.0, 5.0, 7.0, 7.0)
Run Code Online (Sandbox Code Playgroud)
为了在两个Array[Float]人身上执行此操作,我知道我可以压缩它们然后添加带有地图的元素.然而,我仍然在努力寻找能够将任意数量Array[Float]的元素相加的更通用的解决方案.
任何帮助将非常感激!
假设我有一个我希望模式匹配的案例类列表,如果有类型,则返回true或false.例如.,
case class TypeA(one: String, two: Int, three: String)
val list = List(TypeA, TypeA, TypeA)
Run Code Online (Sandbox Code Playgroud)
我想现在匹配类型列表,看看TypeA是否包含其参数之一的某个值(比如第一个参数).我所拥有的是以下内容:
def isAvailableInTypeA(list: List[TypeA], checkStr: String) = {
!(list.dropWhile(_.one != checkStr).isEmpty))
}
Run Code Online (Sandbox Code Playgroud)
对于我想要实现的目标,是否有更好的可读性建议?
考虑下面的代码:
val first = ...
val second = ...
val third = ...
val fours = ...
first match {
case "someString" => second match {
case s:String => third match {
case MyEnum.A => //some logic
case MyEnum.B => fours match {
case Some(old:String) => //some other logic
case default=> defaulLogic
}
case default=> defaulLogic
}
case default=> defaulLogic
}
case default=> defaulLogic
}
private def defaulLogic()= {
//log error here
}
Run Code Online (Sandbox Code Playgroud)
有没有办法将case default逻辑放在一个地方而不是在每个模式匹配中复制它?
注意
只有顶部的match-case …
我正在学习Scala,我想从Java转换一行代码.我在scala中尝试了2种方法,但它们没有用.该类ResultScanner来自Apache HBase - ResultScanner,对于Result类也是如此
Java的
for(Result r : resultScanner) System.out.println(r)
Run Code Online (Sandbox Code Playgroud)
斯卡拉
while(resultScanner.hasNext) // error[1]
println(resultScanner.next())
//error[1]: value hasNext is not a member of org.apache.hadoop.hbase.client.ResultScanner
Run Code Online (Sandbox Code Playgroud)
我也尝试了以下内容:
resultScanner.foreach(println(_)) // error[2]
// error[2]: value foreach is not a member of org.apache.hadoop.hbase.client.ResultScanner
Run Code Online (Sandbox Code Playgroud) 我有这样的事情:
class ProbeActor extends Actor {
case class Probe(messageKey: String)
def receiveProbe: Receive = {
case Probe(probeKey) => println("Good probe: "+probeKey)
case x => println("Bad probe: "+ x)
}
final override def receive = receiveProbe orElse receiveOther
def receiveOther: Receive = {
case _ => println("Other")
}
}
Run Code Online (Sandbox Code Playgroud)
我称之为:
class Prober extends ProbeActor {
val definite = ActorSystem("ProbeTest").actorOf(Props[ProbeActor], name = "probed")
implicit val timeout = Timeout(5 second)
val future = definite ? Probe("key")
}
Run Code Online (Sandbox Code Playgroud)
我希望文本"Good probe: key"应该打印,但我明白了"Bad …
特定
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) 我有这门课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).我怎样才能做到这一点?