2016-09-24 2 views
-1

Я пытаюсь отфильтровать список, содержащий пары.Использование фильтра scala в списке пар

Например мой список

List ((1,2), (3,4), (5,2))

Я хочу использовать фильтр, чтобы отфильтровать список содержит только ответы где первое число в паре больше второго. Как я могу это сделать?

Таким образом, в результате список будет

Список ((5,2))

+1

вы должны по крайней мере, попробовать что-то. вы можете прочитать о List.filter и о паре (кортежах) всюду. Кортежи: https://www.tutorialspoint.com/scala/scala_tuples.htm Список api: http://www.scala-lang.org/api/2.10.3/#scala.collection.immutable.List – pedrorijo91

ответ

3

Фильтр для первого номера в паре больше, чем второй:

val ls = List((1,2),(3,4),(4,5),(6,2)) 
ls.filter(pair => pair._1 > pair._2) // List((6, 2)) 
+1

thank вы! Итак, как scala знает, что такое «пара», когда вы пишете пару в коде? О, я вижу. Вы можете назвать это тем, что хотите. Если я правильно понимаю, вы просто говорите это, для каждой пары из списка посмотрите на первый элемент (_1) и сравните его со вторым элементом (_2)? – Vandexel

+0

Вы можете назвать это, как хотите. Пара - это тип Tuple (точнее, Tuple2). Вы можете ссылаться на элементы Tuples, такие как tuple_1, tuple_2, tuple_3 и т. Д. Например: 'val tuple = (10,11,12,13) ​​// tuple._4 == 13' – Samar

3

Ваш пример не имеют смысл, но я думаю, вы по-прежнему хотите отфильтровать свой список на каком-то предикате.

Чем проще является деконструкции пара:

scala> val l = List((1,2), (3,4), (4,5)) 
l: List[(Int, Int)] = List((1,2), (3,4), (4,5)) 
scala> l.filter { case (a, b) => a > b } 
res0: List[(Int, Int)] = List() 
+0

Извините, я поменял место. Самар помог мне отредактировать его, и теперь он обновляется. – Vandexel

+0

Обычно я предпочитаю подход деструктуризации и почти никогда не использую аксессоры '_1', как вопрос стиля. Но каждому свое! – acjay

Смежные вопросы