2011-01-25 2 views
1

Я пытаюсь получить элемент из списка:Scala - как получить элемент списка

data =List(("2001",13.1),("2009",3.1),("2004",24.0),("2011",1.11)) 

Любая помощь? Задача состоит в том, чтобы печатать отдельно. Строки и цифры как:

print(x._1+" "+x._2) 

но это не работает.

+0

Является ли это домашнее задание? –

+0

Это не домашнее задание Я сделал это для себя из последнего экзамена на семестр. Ну, но, возможно, в какой-то момент вы могли бы интерпретировать его как домашнюю работу. –

ответ

5
scala> val data =List(("2001",13.1),("2009",3.1),("2004",24.0),("2011",1.11)) 
data: List[(java.lang.String, Double)] = List((2001,13.1), (2009,3.1), (2004,24.0), (2011,1.11)) 

scala> data.foreach(x => println(x._1+" "+x._2)) 
2001 13.1 
2009 3.1 
2004 24.0 
2011 1.11 
+0

О боже, простите меня за прогиб foreach ... Спасибо за помощь! –

0

для струнного, используйте

List((1,"aoeu")).foreach(((_:Tuple2[String,_])._1) andThen print)
для чисел, используйте
List(("aoeu",13.0)).foreach(((_:Tuple2[_,Double])._2) andThen print)

+1

'((_: Tuple2 [String, _]) ._ 1), а затем печать' лучше записывается как' x => print (x._1) 'или даже' case (a, b) => print a'. Пожалуйста, позвольте типу inferencer делать всю работу за вас, это не Java! –

6

Одна хорошей практику с функциональным программированием, чтобы сделать как можно больше с побочным эффектом свободных преобразованиями неизменяемых объектов.

Это означает, что вы можете преобразовать список кортежей в список строк, а затем ограничить побочный эффект (println) на один шаг в самом конце.

val data = List(("2001",13.1),("2009",3.1),("2004",24.0),("2011",1.11)) 
val lines = data map { case(a,b) => a + " " + b.toString } 
println(lines mkString "\n") 
4
val list = List(("2001",13.1),("2009",3.1),("2004",24.0),("2011",1.11)) 
println(list map (_.productIterator mkString " ") mkString "\n") 

2001 13.1 
2009 3.1 
2004 24.0 
2011 1.11 
+0

Любить, что 'productIterator', 11/10 очков за масштабируемость :) –

+0

Но вопрос в том, почему нет mkString на самом продукте? – Landei

+0

Это не плохой вопрос ... –

1

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

data.foreach { case (b,c) => println(b + " " + c) }

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