Ответ 1
Как насчет этого, на REPL
List("a","b","c") mkString("")
или в script файле
List("a","b","c").mkString("")
Scala для меня новичок, поэтому я не уверен, что это лучший способ.
Мне нужно просто взять строки в одном списке и присоединиться к ним.
Итак, concat(List("a","b","c"))
возвращает abc
.
Должен ли я сначала увидеть, сколько строк есть в списке, таким образом я могу просто пропустить и присоединиться к ним всем? Я чувствую, что это нужно сделать сначала, таким образом вы можете использовать списки, как и массив, и list[1]
append list[2]
append list[3]
и т.д.
Edit
Вот моя идея, конечно, с ошибками компиляции.
def concat(l: List[String]): String = {
var len = l.length
var i = 0
while (i < len) {
val result = result :: l(i) + " "
}
result
}
Как насчет этого, на REPL
List("a","b","c") mkString("")
или в script файле
List("a","b","c").mkString("")
Некоторые варианты поиска для вас:
Учитывая основной уровень проблемы, я думаю, что вы изучаете некоторые основы программирования. Если выбранный язык Scala, возможно, основное внимание уделяется функциональному программированию, поэтому я постараюсь решить проблему №2, а затем решить # 1. # 3 для дополнительных кредитов.
Это упражнение призвано побудить вас думать о проблеме с функциональной точки зрения. У вас есть набор данных, по которым вы хотите переместить, выполняя набор идентичных операций. Вы уже определили обязательную, циклическую конструкцию (for
). Достаточно просто. Теперь, как бы вы построили это в функциональную конструкцию, не полагаясь на цикл "stateful"?
В функциональном программировании fold... является семейством высшего порядка функции, которые выполняют итерацию произвольной функции по структуре данных в некоторый порядок и создать возвращаемое значение.
http://en.wikipedia.org/wiki/Fold_%28higher-order_function%29
Это похоже на то, что вы могли бы использовать.
Поскольку конкатенация строк ассоциативна (точнее, она образует моноид, имеющий пустую строку как нейтральный элемент), "направление" складки не имеет значения (по крайней мере, если вас не беспокоит производительность).
Говоря об эффективности: в реальной жизни было бы неплохо использовать StringBuilder
для промежуточных шагов, но это зависит от вас, если вы хотите использовать его.
Я просто предполагаю, что вы не только новичок в Scala, но и новичок в программировании в целом. Я не говорю, что SO не предназначен для новичков, но я уверен, что есть много других мест, которые лучше подходят для ваших нужд. Например, книги...
Я также предполагаю, что ваша проблема не должна решаться функциональным, императивным или каким-либо другим способом. Это просто нужно решить как домашнее задание.
Итак, вот список вещей, которые вы должны рассмотреть/спросить себя:
Дольше, чем mkString, но более эффективно:
s.foldLeft(новый StringBuilder()) (_ append _). toString()