2013-04-19 3 views
1

Я пытаюсь написать функцию для сравнения кортежей подобного типа.Я пытаюсь сравнить два Tuples

def compareTuples(tuple1: (String, String, Int), tuple2: (String, String, Int)): (String, String, Int) = { 
    // if tuple1.Int < tuple2.Int return tuple1 else tuple2. 
} 

Как получить доступ к третьему элементу или int в каждом кортеже?

Благодаря

+0

это должно объяснить все, что нужно знать http://www.tutorialspoint.com/scala/scala_tuples.htm –

ответ

5

Для доступа к значению в кортеже t, вы можете использовать t._1, t._2 и т.д.

Для вас, что бы затем привести к

def compareTuples(tuple1: (String, String, Int), tuple2: (String, String, Int)): (String, String, Int) = { 
    if (tuple1._3 < tuple2._3) tuple1 else tuple2 
} 
1

Для того, чтобы этот случай использования более общий, вы можете добавить метод maxBy к Tuple (любого размера, но здесь мы будем использовать Tuple3):

implicit class Tuple3Comparable[T1, T2, T3](t: (T1, T2, T3)) { 
    type R = (T1, T2, T3) 
    def maxBy[B](other: R)(f: R => B)(implicit ord: Ordering[B]): R = if(ord.lt(f(t), f(other))) other else t 
} 

Тогда вы можете делать сравнения, такие как:

("z", "b", 3).maxBy(("c", "d", 10)) (_._3) // selects the second one, ("c", "d", 10) 
("z", "b", 3).maxBy(("c", "d", 10)) (_._1) // selects the first one, ("z", "b", 3) 
Смежные вопросы