這裏是一個不關心等於字長一個版本。應該有更高效的版本,但我想保持相對較短。
基本思路:找出最長單詞的長度(max
)。既然你知道,你從索引i = 0
開始,並從每個字符串中取出該位置i
處的字符,並從中形成一個字符串,直到你在i = max - 1
(這是最長字的最後一個字符的位置。不相等的長度,你必須確保你不訪問特點,它是不是有
例:i = 1
,那麼你e
從hello
,o
從world
,i
從fille
得到,但訪問性格1在r
會導致一個異常。這就是爲什麼我們事先檢查字符串的大小,並在這種情況下追加空字符串。if(i < elem.size) elem(i) else ""
val list = List("hello", "world", "fille", "r")
val max = list.maxBy(_.size).size //gives you the size of the longest word
val result: List[String] = (0 until max).map(i => list.foldLeft("")
((s, elem) => s + (if(i < elem.size) elem(i) else "")))(collection.breakOut)
println(result) //List(hwfr, eoi, lrl, lll, ode)
編輯:
如果您仍然希望它是從左右/上下可讀(如果它們沒有被下令長,你不想要訂購),你可以引入空間。將if(i < elem.size) elem(i) else ""
更改爲if(i < elem.size) elem(i) else " "
。
List("hello", "world", "fille", "r")
將成爲List(hwfr, eoi , lrl , lll , ode)
和List("hello", "world", "r", "fille")
將成爲List(hwrf, eo i, lr l, ll l, od e)
這真是太好了,非常感謝你花了一些時間來處理這個問題。它當然比我所看到的更好。 – lmcphers
不客氣。雖然在你的例子中這些單詞是按照長度排序的。如果您更改訂單,則結果無法完全讀取。例如:'List(「hello」,「world」,「r」,「fille」)'。它仍然像你想要的那樣工作嗎? – Kigyo
對於我的問題,列表是用長度排序的詞創建的,所以這對我來說不是問題。 – lmcphers