Как получить только элементы определенного типа в коллекции в Scala?

#scala #collections #set #tuples

#scala #Коллекции #набор #кортежи

Вопрос:

У меня есть значение в Scala , которое является Set кортежем Long и Double , и я должен присвоить Длинные значения новому набору, чтобы иметь возможность искать его пересечение с другим набором длинных значений.

Так что мои наборы были бы

 firstSet : Set[(Long, Double)] secondSet : Set[Long]  

Я хочу поместить Long значения firstSet в новый набор, чтобы применить метод пересечения в secondSet качестве аргумента.

Можно ли сделать это эффективным способом? Я очень новичок в Scala, поэтому я не просто хочу делать кучу вложенных операторов If.

Комментарии:

1. Вам просто нужно map на первом Set

2. и Set имеет intersect метод

Ответ №1:

Используйте map , чтобы получить первое Long значение из каждого кортежа и создать новый набор. Обратите внимание , что элементы в кортеже имеют доступ ._1 ._2 и так далее.

 val firstSet = Set((0l,0.0), (1l, 1.0)) val firtSet: Set[(Long, Double)] = Set((0,0.0), (1,1.0))  firstSet.map(t =gt; t._1) val res5: Set[Long] = Set(0, 1)  

Затем вы используете этот результат для пересечения с другим набором