Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ionic-framework/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala-从列表到元组列表_Scala - Fatal编程技术网

Scala-从列表到元组列表

Scala-从列表到元组列表,scala,Scala,我是初学者 对不起,我没有找到答案,所以我在这里问问题 我想知道如何使用Scala API实现这一点: (blabla))(>List(('(',2),(')',2)) 目前我有: "(blabla))(".toCharArray.toList.filter(p => (p == '(' || p == ')')).sortBy(x => x) 输出: List((, (, ), )) 现在我如何将每个字符映射到我描述的元组 一般情况下的示例: "t:e:s:t" -> L

我是初学者

对不起,我没有找到答案,所以我在这里问问题

我想知道如何使用Scala API实现这一点:

(blabla))(>List(('(',2),(')',2))

目前我有:

"(blabla))(".toCharArray.toList.filter(p => (p == '(' || p == ')')).sortBy(x => x)
输出:

List((, (, ), ))
现在我如何将每个字符映射到我描述的元组

一般情况下的示例:

"t:e:s:t" -> List(('t',2),('e',1),('s',1),(':',3))

感谢经典
groupBy.mapValues
用例:

scala> val str = "ok:ok:k::"
str: String = ok:ok:k::

scala> str.groupBy(identity).mapValues(_.size) // identity <=> (x => x)
res0: scala.collection.immutable.Map[Char,Int] = Map(k -> 3, : -> 4, o -> 2)
scala>val str=“确定:确定:k:”
str:String=ok:ok:k:
scala>str.groupBy(identity.mapValues(uz.size)//identity(x=>x)
res0:scala.collection.immutable.Map[Char,Int]=Map(k->3,:->4,o->2)

Classic
groupBy.mapValues
用例:

scala> val str = "ok:ok:k::"
str: String = ok:ok:k::

scala> str.groupBy(identity).mapValues(_.size) // identity <=> (x => x)
res0: scala.collection.immutable.Map[Char,Int] = Map(k -> 3, : -> 4, o -> 2)
scala>val str=“确定:确定:k:”
str:String=ok:ok:k:
scala>str.groupBy(identity.mapValues(uz.size)//identity(x=>x)
res0:scala.collection.immutable.Map[Char,Int]=Map(k->3,:->4,o->2)

我非常喜欢sschaef的解决方案,但我想知道是否有人能参与该解决方案与此方案相比的效率:

scala> val str = "ok:ok:k::"
str: String = ok:ok:k::

scala> str.foldLeft(Map[Char,Int]().withDefaultValue(0))((current, c) => current.updated(c, current(c) + 1)) 
res29: scala.collection.immutable.Map[Char,Int] = Map(o -> 2, k -> 3, : -> 4)
我认为我的解决方案比较慢。如果我们有n个总发生次数和m个唯一值:

我的解决方案:我们在所有事件或n上都有剩余的折叠。对于每个事件,我们查找一次以查找当前计数,然后再次创建更新的地图。我假设创建更新的地图的时间是恒定的。
总复杂度:n*2m或O(n*m)

sschaef的解决方案:我们有一个groupBy,我假设它只是在不检查映射的情况下将条目添加到列表中(因此对于所有值,这将是一个常量时间查找加上附加到列表)那么n.对于mapValues,它可能会迭代唯一的值,并获取每个键列表的大小。我假设获取每个项列表的大小是常数时间。
总复杂度:O(n+m)


这似乎是正确的,还是我的假设错了?

我非常喜欢sschaef的解决方案,但我想知道是否有人可以衡量该解决方案与此方案相比的效率:

scala> val str = "ok:ok:k::"
str: String = ok:ok:k::

scala> str.foldLeft(Map[Char,Int]().withDefaultValue(0))((current, c) => current.updated(c, current(c) + 1)) 
res29: scala.collection.immutable.Map[Char,Int] = Map(o -> 2, k -> 3, : -> 4)
我认为我的解决方案比较慢。如果我们有n个总发生次数和m个唯一值:

我的解决方案:我们在所有事件或n上都有剩余的折叠。对于每个事件,我们查找一次以查找当前计数,然后再次创建更新的地图。我假设创建更新的地图的时间是恒定的。
总复杂度:n*2m或O(n*m)

sschaef的解决方案:我们有一个groupBy,我假设它只是在不检查映射的情况下将条目添加到列表中(因此对于所有值,这将是一个常量时间查找加上附加到列表)那么n.对于mapValues,它可能会迭代唯一的值,并获取每个键列表的大小。我假设获取每个项列表的大小是常数时间。
总复杂度:O(n+m)


这似乎是正确的,还是我的假设错了?

你想计算源字符串中的开始括号和结束括号的数量,并将结果作为两个元组的列表吗?@arkonautom不仅仅是括号。我添加了一个示例,说明我正试图使用Scala API实现什么,但目前还没有成功。你想要这个字符吗r和它们在一个元组中的字符串中出现的次数,省略了多个字符的输出,对吗?你想计算源字符串中的开始括号和结束括号的数量,并生成一个包含两个元组的列表吗?@arkonautom不仅仅是括号。我已经添加了一个示例,说明我试图使用Scala API实现的功能,但没有s目前成功。您希望字符串中的字符及其出现次数在一个元组中,而忽略多个字符的输出,对吗?是的,但我不想使用模式匹配和其他函数。是否只能使用Scala API?删除“长而丑陋”和左“短而奇特”版本。是的,但我不想使用模式匹配和其他函数。是否可能只使用Scala API?删除了“长而丑陋”的版本,留下了“短而奇特”的版本。