У меня есть довольно простая .NET-логика, которую я пересаживаю в кодовую базу Scala, и я не знаю в первую очередь о Scala. Она включает в себя запрос LINQ, что группы коллекцию помеченных объектов путем использования анонимного проекционного типа выравниваться и присоединиться, а затем группировки, например:LINQ SelectMany эквивалент в Scala
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