2013-03-22 3 views
0

У меня есть файл, который имеет строки типа:Scala Сортировать на основе числа в строке

A 2.3 B 5.6 
A 5.4 B 3.5 
A 5.6 B 3.4 

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

A 5.6 B 3.4 
A 5.4 B 3.5 
A 2.3 B 5.6 

Я думал о чтении файла в списке, а затем делает матч, чтобы получить вторую колонку, а затем сортировки. Есть ли способ лучше?

ответ

4

Вы, вероятно, хотите что-то вроде

val src = scala.io.Source.fromFile("filename") 
val lines = src.getLines.toSeq.sortBy(line => -line.split(' ').apply(1).toDouble) 
src.close 

(отрицательное для сортировки по величине-первых, по умолчанию является наименьшим-первых).

6

Вы имеете право идею, но имейте в виду, что есть утилита командной строки, чтобы сделать это для вас:

$ sort -k2 -n -r 
A 2.3 B 5.6 
A 5.4 B 3.5 
A 5.6 B 3.4 
^D 
A 5.6 B 3.4 
A 5.4 B 3.5 
A 2.3 B 5.6 

Если вы действительно хотите сделать это в Скале, вам нужно будет читать его в память, а затем sortW с компаратором, который смотрит на второе поле в каждой строке.

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