2013-11-25 5 views
0

У меня есть список списка (типа int), и мне нужно вернуть первый/второй столбец и т. Д. В зависимости от ввода, указанного как индекс столбца. Любые идеи о том, как получить доступ к элементу каждой строки этого столбца? Я попытался это сделать, но все, к чему я пришел, - это использовать функцию карты, но я не знаю, как это работает. Заранее спасибоДоступ к определенному столбцу в scala

ответ

0

типы Список можно получить по номеру индекса

scala> val a=List(1,3,5,7,11,13); 
a: List[Int] = List(1, 3, 5, 7, 11, 13) 

scala> a(1) 
res0: Int = 3 

scala> a(2) 
res1: Int = 5 

Многомерные списки работают слишком

scala> val a=List(List(1,3,5,7,11,13), List(2,4,6,8,10,12)); 
a: List[List[Int]] = List(List(1, 3, 5, 7, 11, 13), List(2, 4, 6, 8, 10, 12)) 

scala> a 
res2: List[List[Int]] = List(List(1, 3, 5, 7, 11, 13), List(2, 4, 6, 8, 10, 12)) 

scala> a(1) 
res3: List[Int] = List(2, 4, 6, 8, 10, 12) 

scala> a(1)(2) 
res4: Int = 6 

обновление, чтобы ответить на комментарий, функцию, которая принимает список списков Ints и а номер столбца

scala> val a=List(List(1,3,5,7,11,13), List(2,4,6,8,10,12), List(0,10,20,30,40,50,60)); 
a: List[List[Int]] = List(List(1, 3, 5, 7, 11, 13), List(2, 4, 6, 8, 10, 12), List(0, 10, 20, 30, 40, 50, 60)) 
    scala> def getcol(l: List[List[Int]], n: Int) = (for (i <- l) yield i(n)).toList 
getcol: (l: List[List[Int]], n: Int)List[Int] 

scala> getcol(a,0) 
res17: List[Int] = List(1, 2, 0) 

scala> getcol(a,1) 
res18: List[Int] = List(3, 4, 10) 
0

Один вариант:

def getColumn[T](list: List[List[T]], column: Int): List[T] = { 
    list.map(row => row(column)) 
} 

Тогда:

scala> val l = List(List(1, 2, 3), List(4, 5, 6), List(7, 8, 9)) 
l: List[List[Int]] = List(List(1, 2, 3), List(4, 5, 6), List(7, 8, 9)) 

scala> getColumn(l, 2) 
res0: List[Int] = List(3, 6, 9) 
+0

Параметр 'Метод map' на список запускает функцию один раз для каждого элемента списка и создает новый список, который будет содержать результаты каждого вызова функции. Здесь функция 'row => row (column)', в которой говорится: «Принимайте один параметр с именем« row », и для каждого значения вызывается метод' apply' с 'column' в качестве параметра" (строка кода ' column) 'равнозначно' row.apply (column) '). Поскольку мы работаем со списком списков, 'строка' будет установлена ​​для каждого подсписка по очереди, а' строка (столбец) 'является простым доступом к элементу списка - когда' column' равно 2, он возвращает третий элемент список. –

0
val nums = List(List(1,2,3),List(4,5,6)) 
nums map(_(1)) // gives List(2,5) 

Или в методе с параметром colIndex:

def sliceCol[T](ls: List[List[T]], colIndex: Int): List[T] = 
    ls map(_(colIndex)) 

sliceCols(1) // same result 
+0

long-hand is: num map (x => x (index)). 'Для каждой записи в num (список [Int]) сопоставьте ее с новым значением val, обратившись к одному из его элементов через индекс'. Короткая комбинация: _ вводит новую переменную в этой точке (x) & whacks 'x =>' перед выражением. –

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