我在很多例子中看到有时使用Seq,而其他时候是List ......
除了前一个是Scala类型和List来自Java之外,有什么区别吗?
这是一个非常基本的问题,但这让我烦恼,所以我问.
我需要一系列重复的数字,即1 1 ... 1 2 2 ... 2 3 3 ... 3等.我实现这个的方式是
nyear<-20
names<-c(rep(1,nyear),rep(2,nyear),rep(3,nyear),rep(4,nyear),
rep(5,nyear),rep(6,nyear),rep(7,nyear),rep(8,nyear))
Run Code Online (Sandbox Code Playgroud)
哪个有效,但很笨拙,显然不能很好地扩展.如何按顺序重复N次整数M次?我尝试嵌套seq()和rep(),但这并不是我想要的.我显然可以写一个for循环来做它,但这看起来也很笨拙 - 应该有一个内在的方法来做到这一点!
什么时候seq_along有效,但seq会产生意想不到的结果?
从?seq我们的文档:
请注意,无论参数名称如何,它都会调度第一个参数的类.如果仅使用一个参数来调用它可能会产生意想不到的后果
along.with:这样做会更好:seq_along在这种情况下使用它会好得多.
Seq的大小和长度有什么区别?何时使用一个而另一个?
scala> var a :Seq[String] = Seq("one", "two")
a: Seq[String] = List(one, two)
scala> a.size
res6: Int = 2
scala> a.length
res7: Int = 2
Run Code Online (Sandbox Code Playgroud)
一样的?
谢谢
说,我有一个字符串序列作为输入,我想得到一个新的不可变Seq,它由输入元素和一个项目组成"c".以下是我发现的两种方法:
assert(Seq("a", "b", "c") == Seq("a", "b") ++ Seq("c"))- 这个的问题是,似乎Seq("c")仅仅为了操作而实例化临时序列()是有害的并且将导致开销assert(Seq("a", "b", "c") == List("a", "b") ::: "c" :: Nil)- 这个将输入集合的类型限制为a List,因此Seq("a", "b") ::: "c" :: Nil不起作用.此外,似乎实例化a Nil也可能导致开销我的问题是:
Seq("a", "b") ::: Nil不允许Scala开发人员的缺陷?有可能做这样的事情:
start=1
end=10
echo {$start..$end}
# Ouput: {1..10}
# Expected: 1 2 3 ... 10 (echo {1..10})
Run Code Online (Sandbox Code Playgroud) 假设我有一个向量:
remove <- c(17, 18, 19, 20, 24, 25, 30, 31, 44, 45).
如何选择/提取向量中的每个第二个值?像这样:17, 19, 24, 30, 44
我正在尝试使用该seq功能:seq(remove, 2)但它不太有效.
任何帮助是极大的赞赏.
我可以制作一系列这样的数字:
s = seq(from=1, to=10, by=1)
Run Code Online (Sandbox Code Playgroud)
如何从AZ制作一系列字符?这不起作用:
seq(from=1, to=10)
Run Code Online (Sandbox Code Playgroud) 一个快速的问题,可能更多的是一个咆哮(但我希望改为开悟).
在F#中,字符串与Seq兼容,因此"abcd"|> Seq.map f将对字符串起作用.
这是处理字符串的绝佳工具,例如从字符串中获取前5个字符:
"abcdef01234567" |> Seq.take 5
Run Code Online (Sandbox Code Playgroud)
或删除重复的字符:
"abcdeeeeeee" |> Seq.distinct
Run Code Online (Sandbox Code Playgroud)
问题是,一旦你有了char seq结果,将它再次转换回字符串变得非常尴尬,String.concat""要求成员是字符串,所以我最终做了很多:
"abcdef01234567"
|> Seq.take 5
|> Seq.map string
|> String.concat ""
Run Code Online (Sandbox Code Playgroud)
这么多,我有90%的项目使用的功能:
let toString : char seq -> string = Seq.map string >> String.concat ""
Run Code Online (Sandbox Code Playgroud)
我觉得这已经超过了顶层,但是在我想找到另一种选择的地方,我遇到了令人发指的事情,比如StringBuilder或内联lambda并使用new:
"abcdef01234567"
|> Seq.take 5
|> Seq.toArray
|> fun cs -> new string (cs) (* note you cannot just |> string *)
Run Code Online (Sandbox Code Playgroud)
我希望在语言中看到的(也许是疯狂的)期望当在字符串上使用Seq时,结果表达式中的类型签名应该是字符串 - >字符串.意思是,出现的是什么."abcd"|> Seq.take 3 ="abc".
有没有理由在这种情况下我对高级字符串操作的期望是错误的?
有没有人建议以一种不错的方式接近这个,我觉得我必须遗漏一些东西.