我有一些非常简单的.NET逻辑,我正将其移植到Scala代码库中,而我并不真正了解Scala的第一件事。它包括一个LINQ查询组标记对象的集合通过使用匿名类型投影的扁平化和加入,其次为分组,例如:在Scala中的LINQ SelectMany相当于
var q = things.SelectMany(t => t.Tags, (t, tag) => new { Thing = t, Tag = tag })
.GroupBy(x => x.Tag, x => x.Thing);
在Scala中,它看起来像flatMap
可能是有用的,但我无法弄清楚如何通过匿名将它与groupBy
结合起来。
这种事情在Scala中更加复杂吗?还是我错过了一些简单的东西?
UPDATE:
我结束了去:
things.flatMap(t => t.Tags.map(x => (x,t))).groupBy(x => x._1)
然后当然后来当我在地图中存取的值,我需要做的事:
.map(x => x._2)
到从组中取出组。
简单,当你知道如何!
我没有完全按照你想要完成的工作,你能改正你的C#示例。 SelectMany只接受一个输入(除了'this'参数的扩展名),你似乎有两个输入。此外,你的括号不平衡,并且弄清楚你想让他们去的地方。 – Danny
我看到你添加了缺少的括号,但你的'SelectMany'有太多的参数源和选择器方法https://msdn.microsoft.com/en-us/library/bb534336(v=vs.110).aspx但你似乎在提供两种方法 – Danny
对不起,错过了一个家长。 – lesscode