我想将map生成的lazy seq的成员作为单个参数提供给另一个函数.是否存在拼接(懒惰)seq的函数?
我有一个Seq的Tuple3元素.我想要一个Set由每个元组的第二个元素组成的结果集合(可能是a ).
例如
(a, b, c), (d, e, f), (g, h, i) ==> (b, e, h)
Run Code Online (Sandbox Code Playgroud)
任何的想法?我搜索了很多,但我发现所有与过滤元组有关,而不是在其中,如果这有任何意义.
我还是Scala的新手,学习是一个漫长的过程:)感谢您的帮助.
我是shell脚本的新手,我正在尝试一个简单的任务,即获取使用生成的数字序列的长度seq.
在这里的相关帖子的帮助下:如何在unix shell中找到数组长度?我能做到这一点 -
a=(1 2 3 4 5)
echo ${#a[@]} #length of a
5 #length of a = 5 (This is fine !!)
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试使用类似的东西seq..
b=$(seq 1 1 10)
echo $b
1 2 3 4 5 6 7 8 9 10
echo ${#b[@]}
1 #the length of b is 1, while I expect it to be 10
Run Code Online (Sandbox Code Playgroud)
为什么会这样?变量类型a和b是否不同?是b不是数组?
我相信我在这里缺少一些非常微不足道的东西,非常感谢帮助.
谢谢
阿什温
我正在尝试在Scala中创建一个单词列表.我是这门语言的新手.我已经阅读了很多关于你如何不能编辑不可变对象的帖子,但是没有人能够告诉我如何在Scala中创建我需要的列表.我使用var初始化,但这没有帮助.
var wordList = Seq.empty[String]
for (x <- docSample.tokens) {
wordList.++(x.word)
}
println(wordList.isEmpty)
Run Code Online (Sandbox Code Playgroud)
我非常感谢对此的一些帮助.我理解对象在Scala中是不可变的(尽管变量不是),但我需要的是一些简明的信息,为什么上面总是打印"true",以及如何使列表添加docSample.tokens.word中包含的单词.
有人可以帮我理解为什么-1 + 1 <> 0?
有人可以帮助我理解为什么我在内置函数consum(),我的函数ct()和Excel之间得到三个不同的值,当它们都在做同样的事情时?
现在,我很确定答案是一个"回合"问题,但我无法弄清楚这个问题的部分来自何处.我的意思是,这一切"看起来非常简单.
在R中,当我构建序列'a'然后运行cumsum(a)时,我没有像我期望的那样得到0的结果.如果我尝试使用函数计算相同的值,我也会得到不同的答案.最后,如果我尝试使用Excel计算相同的值,我会得到第三个答案.
这是我使用cumsum()得到的:
> a<- seq(-1, 1, by=.1)
> a
[1] -1.0 -0.9 -0.8 -0.7 -0.6 -0.5 -0.4 -0.3 -0.2 -0.1 0.0 0.1 0.2 0.3
[15] 0.4 0.5 0.6 0.7 0.8 0.9 1.0
> cumsum(a)
[1] -1.000000e+00 -1.900000e+00 -2.700000e+00 -3.400000e+00 -4.000000e+00
[6] -4.500000e+00 -4.900000e+00 -5.200000e+00 -5.400000e+00 -5.500000e+00
[11] -5.500000e+00 -5.400000e+00 -5.200000e+00 -4.900000e+00 -4.500000e+00
[16] -4.000000e+00 -3.400000e+00 -2.700000e+00 -1.900000e+00 -1.000000e+00
[21] 1.110223e-15
Run Code Online (Sandbox Code Playgroud)
我写了一个快速函数来测试这个并期望得到相同的答案(或0),但我得到一个完全不同的答案.这是我的功能及其结果:
ct<- function(x){
result = 0
for(i in 1:length(x)){
cat(i, ": Result = …Run Code Online (Sandbox Code Playgroud) Scala带来了很好的corresponds方法:
val a = scala.io.Source.fromFile("fileA").getLines().toSeq()
val b = scala.io.Source.fromFile("fileB").getLines().toSeq()
val areEqual = a.corresponds(b){_.equals(_)}
if(areEqual) ...
Run Code Online (Sandbox Code Playgroud)
我非常喜欢这种简洁.
是否已经定义了类似的方法,它还会向我报告两个序列不同的第一个位置?
即,有一种更惯用的方式来写这样的东西:
val result = ((seqA zip seqB).zipWithIndex).find{case ((a,b),i) => !a.equals(b)} match{
case Some(((a,b),i)) => s"seqA and seqB differ in pos $i: $a <> $b"
case _ => "no difference"
}
Run Code Online (Sandbox Code Playgroud)
因为你可以看到,这是颈部的血腥疼痛.如果我想使用三元组而不是元组元组,它会变得更糟:
val result = (((seqA zip seqB).zipWithIndex) map {case (t,i) => (t._1,t._2,i)}).find{case (a,b,i) => !a.equals(b)} match{
case Some((a,b,i)) => s"seqA and seqB differ in pos $i: $a <> $b"
case _ …Run Code Online (Sandbox Code Playgroud) 我想从给定日期(2015 年 7 月 31 日)向后生成一系列日期。我没有得到四月的最后一天,而是得到五月的第一天,如下所示:
> seq(as.Date('2015-07-31'), as.Date('2014-09-30'), by = '-3 month')
[1] "2015-07-31" "2015-05-01" "2015-01-31" "2014-10-31"
Run Code Online (Sandbox Code Playgroud)
我也尝试传入-quarter该by选项,但出现以下错误:
> seq(as.Date('2015-07-31'), as.Date('2014-09-30'), by = '-quarter')
Error in seq.Date(as.Date("2015-07-31"), as.Date("2014-09-30"), by = "-quarter") :
invalid string for 'by'
Run Code Online (Sandbox Code Playgroud)
虽然我可以检查当月的某一天并在日期被过度调整到错误的月份时进行相应的更正,但我想知道是否存在一个简洁的代码片段来执行上述操作?
作为使用策略模式的项目的一部分,我正在尝试编写一个函数,它创建一个函数,每次应用时返回无限序列的下一个值.目前我正在使用这个狡猾的GetNext函数:
let GetNext<'T> (enumerator:System.Collections.Generic.IEnumerator<'T>) =
let n = enumerator.MoveNext()
enumerator.Current
let FunctionFactory<'T> =
let s = 0.0 |> Seq.unfold (fun i -> Some(i, if 0.0 = i then 1.0 else 0.0))
let enumerator = s.GetEnumerator()
(fun (ignoredParam:'T) -> GetNext enumerator )
Run Code Online (Sandbox Code Playgroud)
我希望FunctionFactory看起来像这样:
let FunctionFactory<'T> =
let s = 0.0 |> Seq.unfold (fun i -> Some(i, if 0.0 = i then 1.0 else 0.0))
(fun (ignoredParam:'T) -> Seq.next s )
Run Code Online (Sandbox Code Playgroud)
该ignoredParam在穿过相同的策略模式和依赖于它提供上下文其他功能中使用.由于这看起来很糟糕,我真的有两个问题.为什么没有Seq.next?实现各种可以注入这样的策略框架的序列表达式的正确/优雅方法是什么? …
没有Future,这就是我将所有较小的Seq合并为带有平面图的一个大Seq的方式
category.getCategoryUrlKey(id: Int):Seq[Meta] // main method
val appDomains: Seq[Int]
val categories:Seq[Meta] = appDomains.flatMap(category.getCategoryUrlKey(_))
Run Code Online (Sandbox Code Playgroud)
现在该方法getCategoryUrlKey可能会失败。我在前面放置了一个断路器,以避免在经过maxFailures之后为下一个元素调用它。现在,断路器不会返回a Seq而是aFuture[Seq]
lazy val breaker = new akka.pattern.CircuitBreaker(...)
private def getMeta(appDomainId: Int): Future[Seq[Meta]] = {
breaker.withCircuitBreaker {
category.getCategoryUrlKey(appDomainId)
}
}
Run Code Online (Sandbox Code Playgroud)
如何遍历List appDomains并将结果合并为一个Future [Seq],有可能合并为Seq?
如果可以使用函数式编程,是否有一种方法可以在没有临时变量的情况下直接进行转换?
据说Haskell seq函数强制评估其第一个参数并返回第二个参数.它用于增加表达式评估的严格性.那么以下如何简单地返回5:
seq [1..] 5
Run Code Online (Sandbox Code Playgroud)
它不应该在试图构建无限列表时陷入困境吗?