标签: seq

Seq模块中的聚合函数

我正在尝试向Seq模块添加一些额外的聚合函数.我在看这里列出的一些函数的实现:

https://github.com/fsharp/fsharp/blob/master/src/fsharp/FSharp.Core/seq.fs

其中一个免责声明是"该函数返回一个序列,一旦该序列被迭代,就会消化整个初始序列.因此,该函数不应该用于大序列或无限序列." 许多功能都是如此,例如GroupBy.

  • 第一个问题:是否有方法可以编写可以有效处理大型序列的聚合函数?我知道"大"是主观的; 我只是在寻找编写这些函数的一般模式.

  • 第二个问题:我如何确保像Dictionary这样的集合(在集合函数中定义)被有效地垃圾收集?我理解字典应该在超出范围时收集,但有没有办法明确表明?鉴于字典的范围是保留在函数内,我不能在那上面调用.Clear()吗?

f# dictionary seq

2
推荐指数
1
解决办法
1052
查看次数

在F#中使用管道操作时出现意外的类型编译问题

我正在尝试解析XML文件的目录,然后在给定节点存在时选择特定属性的值.我无法理解以下F#导致的编译错误的原因.

open System
open System.IO
open System.Xml
open System.Xml.XPath
open System.Xml.Linq


let configRootDirectory = @"C:\dir"
let relativeProductDir = @"relDir"

let ExtractConfiguredCalculator (productConfigFile:string) = 
    let xmlNavigator = XPathDocument(productConfigFile).CreateNavigator()
    let node = xmlNavigator.SelectSingleNode(@"Product/SupportedRisk/Risk[@type='PV']") 
    node.GetAttribute("methodology", "")

let configFile = Directory.GetFiles(Path.Combine(configRootDirectory, relativeProductDir), @"*.xml")
                    |> Seq.cast<string>
                    |> Seq.iter(fun configFileName -> ExtractConfiguredCalculator(configFileName))                  
                    |> Seq.filter(fun configuredCalculatorNode -> configuredCalculatorNode != null)
                    |> Seq.iter(fun calculator -> Console.WriteLine(calculator))
Run Code Online (Sandbox Code Playgroud)

上面的代码片段来自我在LinqPad中尝试的代码.看到的错误信息如下.

This expression was expected to have type     unit     but here has type     string   
Run Code Online (Sandbox Code Playgroud)

更新 尝试获得更多f#-ish.如果可以改进,请建议.

let configFile = 
        Directory.GetFiles(Path.Combine(configRootDirectory, relativeProductDir), @"*.xml") …
Run Code Online (Sandbox Code Playgroud)

f# linqpad seq

2
推荐指数
1
解决办法
270
查看次数

减少元组的可变数量在Scala中映射[Key,List [Value]]的序列

我有两个序列:

Seq("a" -> 1, "b" -> 2)
Seq("a" -> 3, "b" -> 4)
Run Code Online (Sandbox Code Playgroud)

我想要的是一个结果Map看起来像这样:

Map(a -> List(3, 1), b -> List(4, 2))
Run Code Online (Sandbox Code Playgroud)

scala tuples map seq

2
推荐指数
1
解决办法
1112
查看次数

我如何在Fsharp中使用GetEnumerator获取seq中的seq?

对于我的项目,我想拉出seq的seq>.为此我想我可以使用GetEnumerator.之后我想比较头部(当前元素的Seq.head),如果它包含我选择的元素.问题是,如果我使用.Current它会给我回obj而不是seq.我做错了什么?

let convertElements (input:seq<seq<Elements>>) =
    let en = input.GetEnumerator()
    let rec loop (en:System.Collections.IEnumerator) =
        match en.MoveNext() with
            | true  -> match (Seq.head en.Current) with
                        |AElement(_) -> createNewA andSoOn
                        |_    -> ()
            | false -> ()    
    loop en
Run Code Online (Sandbox Code Playgroud)

f# seq

2
推荐指数
1
解决办法
597
查看次数

你如何使用with.with为r中的唯一值创建序列

假设我有一个数值向量

  [1]  2844  4936  4936  4972  5078  6684  6689  7264  7264  7880  8133  9018  9968  9968 10247
 [16] 11267 11508 11541 11607 11717 12349 12349 12364 12651 13025 13086 13257 13427 13427 13442
 [31] 13442 13442 13442 14142 14341 14429 14429 14429 14538 14872 15002 15064 15163 15163 15324
 [46] 15324 15361 15361 15400 15624 15648 15648 15648 15864 15864 15881 16332 16847 17075 17136
 [61] 17136 17196 17843 17925 17925 18217 18455 18578 18578 18742 18773 18806 19130 19195 …
Run Code Online (Sandbox Code Playgroud)

r seq

2
推荐指数
1
解决办法
726
查看次数

R从两列创建序列表

我有一张桌子如下

product=c("a","b","c")
min=c(1,5,3)
max=c(1,7,7)
dd=data.frame(product,min,max)
> dd
  product min max
1       a   1   1
2       b   5   7
3       c   3   7
Run Code Online (Sandbox Code Playgroud)

我想创建一个如下所示的表.我想为产品之间的每个值创建一行,包括产品的最小值和最大值

product mm
a 1
b 5
b 6
b 7
c 3
c 4
c 5
c 6
c 7
Run Code Online (Sandbox Code Playgroud)

我怎么能用R做呢?有什么方法能给出快速的结果吗?

r seq dataframe

2
推荐指数
1
解决办法
2771
查看次数

Scala Seq比较

在Scala中有一种方法可以比较两个序列,如果它包含相同的元素,它返回true,无论顺序和重复如何?

Seq("1", "2") vs Seq("2", "1")           => true
Seq("3", "1", "2") vs Seq("2", "1", "3") => true
Seq("1", "1", "2") vs Seq("2", "1")      => true
Run Code Online (Sandbox Code Playgroud)

谢谢

备注:这是不是一个重复的这个,因为它也要求以排除从单向复制,它是不是使用LIST的序列.

scala seq

2
推荐指数
1
解决办法
2616
查看次数

如何在bash中使用seq创建单词列表

我正在使用seq -s"" - f"数据%g:"5来创建

data1 : data2 : data3 : data4 : data 5 : 
Run Code Online (Sandbox Code Playgroud)

但是,我想让它开始一些我的选择而不是1而不是在最后有":"符号.例如这样的事情:

data3 : data4 : data5
Run Code Online (Sandbox Code Playgroud)

有没有任何一线解决方案?

提前致谢!

当前输出:

seq -s " " -f " data%g :" 5
data1 : data2 : data3 : data4 : data 5 :
Run Code Online (Sandbox Code Playgroud)

期望:

data3 : data4 : data5
Run Code Online (Sandbox Code Playgroud)

bash sequence seq

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

我可以使用for-yield语法在Scala中返回Map集合吗?

我是Scala的新手,所以希望你能在这个问题中容忍这个问题,如果你发现它是noobish :)

我写了一个函数,它使用yield语法返回一个Seq元素:

def calculateSomeMetrics(names: Seq[String]): Seq[Long] = {
  for (name <- names) yield {
    // some auxiliary actions
    val metrics = somehowCalculateMetrics()
    metrics
  }
}
Run Code Online (Sandbox Code Playgroud)

现在我需要修改它以返回Map以保留原始名称对每个计算值:

def calculateSomeMetrics(names: Seq[String]): Map[String, Long] = { ... }
Run Code Online (Sandbox Code Playgroud)

我试图使用相同的yield语法,但产生一个元组而不是单个元素:

def calculateSomeMetrics(names: Seq[String]): Map[String, Long] = {
  for (name <- names) yield {
    // Everything is the same as before
    (name, metrics)
  }
}
Run Code Online (Sandbox Code Playgroud)

但是,编译器会Seq[(String, Long)]根据编译器错误消息对其进行解释

type mismatch;
  found   : Seq[(String, Long)]
  required: Map[String, Long]
Run Code Online (Sandbox Code Playgroud)

所以我想知道,实现这样的事情的"规范Scala方式"是什么?

dictionary scala yield seq

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

如何使数列升为幂数

我有:

cost = c(2^(-5),2^(-3),2^(-1),2^(1),2^(3),2^(5),2^(7),2^(9),2^(11),2^(13),2^(15))
Run Code Online (Sandbox Code Playgroud)

我想要一个更优雅的命令,例如:

seq(from = 2^(-5), to = 2^(15), by = __)
Run Code Online (Sandbox Code Playgroud)

r sequence seq

2
推荐指数
1
解决办法
48
查看次数

标签 统计

seq ×10

f# ×3

r ×3

scala ×3

dictionary ×2

sequence ×2

bash ×1

dataframe ×1

linqpad ×1

map ×1

tuples ×1

yield ×1