Nano Hash - криптовалюты, майнинг, программирование

Поиск общих элементов в двух списках (Scala)

Вопрос новичка в Scala.

Я пытаюсь реализовать функцию, которая получает два списка, находит общий элемент, чем выполняет манипуляции и создает новый список

У меня есть класс дела

case class weightedFruits(fruits: Set[String], weight: Double) 

и два списка weightedFruitsList и filteredWeightedFruitsList:

// set is sorted 
val weightedFruitsList = List(
weightedFruits(Set("banana"), 200),
weightedFruits(Set("banana", "orange"), 180),
weightedFruits(Set("banana", "orange", "apple"), 170),
weightedFruits(Set("feijoa", "fig"), 201))


 //filtered List , Set sorted, contains "melon" as last member
val filteredWeightedFruitsList = List(
weightedFruits(Set("banana", "melon"), 250),
weightedFruits(Set("banana", "orange", "melon"), 270),
weightedFruits(Set("banana", "orange", "apple", "melon"), 365))

Я хотел бы просмотреть каждый элемент в filteredWeightedFruitsList, найти те же элементы в weightedFruitsList, выполнить небольшую манипуляцию и создать новый List[weightedFruits]

Мой (еще не работающий) код:

def conf :Option[List[weightedFruits]] = {

  for (filtered <- filteredWeightedFruitsList){

     weightedFruitsList.find{

      case x if ( x.fruits equals filtered.fruits.dropRight(1) ) => return weightedFruits(x.fruits, x.weight / filtered.weight)]
      case _ => false
   }    
  }    
}

С этим кодом у меня две проблемы: 1) type mismatch; found : Unit required: Option

2) type mismatch; found : weightedFruits required: Option[List[weightedFruits]]

Любые мысли приветствуются. Извините, если мой вопрос вас разозлил...

Последний вопрос, может быть, есть более эффективный способ выполнить эту задачу?

Спасибо


  • Возможно, стоит отметить, что наборы не сортируются. Для этого вам понадобятся SortedSets. 22.09.2016
  • Не могли бы вы привести пример сигнатуры, входных и выходных данных желаемой функции? Пример def add1(x: Int): Int, ввод: add1(42), вывод: 43. 22.09.2016
  • желаемая функция ввода два List[weightedFuits], вывод тоже список. def conf ( filtered: List[weightedFruits] , full: List[weightedFruits]): List[weightedFruits] 22.09.2016

Ответы:


1

type mismatch; found : weightedFruits required: Option[List[weightedFruits]] вызвано тем, что ваш метод conf не возвращает результат типа Option[List[weightedFruits]]. возможно, вы можете попробовать использовать for yield для этого.

def conf :List[weightedFruits] = for {
   f <- filteredWeightedFruitsList
   t <- weightedFruitsList.find(i => f.fruits.dropRight(1) == i.fruits)
} yield t.copy(weight = t.weight / f.weight)

Метод copy скопирует case class и переопределит некоторые поля, используя name.

22.09.2016
  • Смотри красиво, пожалуйста, добавь пару слов о t.copy 22.09.2016
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..