У меня есть следующие переменнойУменьшают Список Карта кортежей
val x1 = List((List(('a',1), ('e',1), ('t',1)),"eat"), (List(('a',1), ('e',1), ('t',1)),"ate"))
Я хочу, чтобы получить
List(Map -> List)
, который будет выглядеть примерно следующим образом. Идея заключается в том, чтобы сгруппировать слова б символы, содержащиеся в них
Map(List((a,1), (e,1), (t,1)) -> List(eat, ate))
Я использовал следующее для достижения этой цели, однако, не совсем получить это право. Я использовал следующий код и получить ожидаемый результат
scala> val z1 = x1.groupBy(x => x._1)
.map(x => Map(x._1 -> x._2.map(z=>z._2)))
.fold(){(a,b) => b}
z1: Any = Map(List((a,1), (e,1), (t,1)) -> List(eat, ate))
Однако, я хотел бы вернуться очевидный тип Map[List[(Char, Int)],List[String]]
и не Any
, как возвращается в моем случае. Кроме того, мне интересно, лучше ли все это делать сама. Большое спасибо!
Спасибо! Работал как шарм! Об этом представлении данных, 'List [(Список [(Char, Int)], String)]' вычисляется из словаря разных слов. – borarak
Вы можете использовать следующую канонизацию: 'val words = List (" eat "," ate "," cheap "," peach "," tree ") words.map (w => (w.toLowerCase.sorted .., ш)) GroupBy (_._ 1) .mapValues (_ карта (_._ 2)) ' Это дает: ' Карта (AET -> Список (есть, ели), acehp -> Список (дешево, персик), eert -> Список (дерево)) ' – Iadams