问题描述
0 1
a 2 0
b 0 2
c 1 2
d 1 0
e 0 0
f 0 0
为了得到一个连接的字符串,我做这样的事情:
import shutil
import urllib.parse
import urllib.request
import os
urls = {
'just_filename' : 'https://github.com/bits4waves/100daysofpractice-dataset/raw/master/requirements.txt','filename_with_params' : 'https://github.com/bits4waves/resonometer/blob/master/sound/violin-A-pluck.wav?raw=true','no_filename' : 'https://download.mozilla.org/?product=firefox-latest-ssl&os=linux64&lang=en-US',}
for url in urls.values():
with urllib.request.urlopen(url) as response:
parsed_url_path = urllib.parse.urlparse(response.url).path
filename = os.path.basename(parsed_url_path)
with open(filename,'w+b') as f:
shutil.copyfileobj(response,f)
会导致
$stringArray = @('a','b','c')
$stringArray -join ','
我想得到
a,b,c
???
更新:我当前的脚本是这样的:
$stringArray = @(@('a1','a2','a3'),'c')
但是这个锯齿状数组的维度是硬编码的(即它只适用于数组数组,而不适用于数组数组)。有什么更优雅、更灵活的吗?
解决方法
您需要的是一个递归辅助函数来展平数组。
像这样:
function Flatten-Array([array]$a) {
$a | ForEach-Object {
if ($_ -is [array]) { Array-Flatten $_ } else {$_ }
}
}
用法:
$stringArray = @(@('a1','a2','a3'),'b','c')
$flatArray = Flatten-Array $stringArray
$flatArray -join ',' # --> a1,a2,a3,b,c
或者使用更深的嵌套数组:
$stringArray = @('X','Y','Z',@(@('a1','a3',@(3,4,5)),'c'))
$flatArray = Flatten-Array $stringArray
$flatArray -join ',' # --> X,Y,Z,a1,3,5,c