簡體   English   中英

如何垂直循環遍歷字符串數組

[英]How to vertically loop over an array of strings

我正在嘗試檢索字符串數組中的第一個字母和后續字母。 我一直在做的是循環遍歷每個項目,然后打印 arr[i][0],但這不適用於后面的字母。

例如:

Input: 
'
00100
11110
10110

Output: 
011010111011000

基本上,我想垂直遍歷,而不是水平遍歷。

 function solution(s) { // transform string into array let arr = s.split('\n') for (let i = 0; i < arr.length; i++) { // log the first, then proceeding letter in each string console.log(arr[i][0]) } } console.log( solution(`00100 11110 10110 `) )

使用嵌套for循環:

 function solution(s) { // transform string into array let arr = s.split('\n') for (let i = 0; i < arr[0].length; i++) { for(let f = 0; f < arr.length; f++){ console.log(arr[f][i]) } } } console.log(solution(`00100 11110 10110`))

您可以為每一行拆分並再次拆分,map 是一個新數組,其中字符已轉置。

 function solution(s) { return s.split('\n').reduce((r, s) => [...s].map((c, i) => (r[i] || '') + c), []).join(''); } console.log(solution('00100\n11110\n10110'));

將矩陣的行轉換為列,反之亦然,這是一種稱為轉置的操作。 一個簡單的轉置 function 可能如下所示:

const transpose = (xs) => 
  xs [0] .map ((_, i) => xs .map (r => r [i]))

但是,您沒有 arrays 數組。 在換行符上拆分輸入后,您將擁有一個字符串數組。 但是我們可以很容易地改變這個 function 以便它適用於任何可迭代的迭代。 它仍然會返回一個 arrays 數組,但我們可以輕松地將其包裝在 function 中,將 output 轉換為字符串數組; 我們稱之為inColumns

然后我們將它包裝在一個東西中,將你的字符串解析成一個字符串數組,調用, inColumns ,然后將結果合並成一個字符串。 例如,我們可以稱它為adventOfCodeDay3

 const transpose = (xs) => [... xs [0]].map ((_, i) => [... xs].map (r => r [i])) const inColumns = (xs) => transpose (xs).map (s => s.join ('')) const adventOfCodeDay3 = (s) => inColumns (s.split ('\n')).join ('') const input = `00100 11110 10110` console.log (adventOfCodeDay3 (input))

我發現這種故障是解決問題的一種更清潔的方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM