如何在PowerShell中切片二维数组?

时间:2018-01-03 09:01:53

标签: arrays powershell

我使用ADODB连接从数据库查询中获得了一个二维数组。简而言之,在打开连接后,我通过以下方式检索记录集:

sizeof

我想查看特定列的前10行。所以,我试过了:

$count

但它成功地失败了:

You cannot index into a 2 dimensional array with index [0].
At line:1 char:1
+ $rows[0,(0..9)]
+ ~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidOperation: (:) [], RuntimeException
    + FullyQualifiedErrorId : NeedMultidimensionalIndex

该数组有1000行和200多列。我可以使用语法:

package main

import (
    "net/http"
    "fmt"
    "os"
    "crypto/tls"
)

func main(){

    client := &http.Client{
        Transport: &http.Transport{
            DisableKeepAlives:   false,
            MaxIdleConnsPerHost: 10,
            TLSClientConfig: &tls.Config{
                InsecureSkipVerify: true,
            },
        },
    }

    fmt.Println(client)

    req, _ := http.NewRequest("GET", os.Args[1], nil)

    _, err := client.Do(req)
    if err != nil {
        fmt.Println("Something bad happened: ", err)
    }

}
没有问题。

我在这里缺少什么?

2 个答案:

答案 0 :(得分:3)

索引运算符接受值列表,但如果您的数组具有维度> 1该列表必须是数组列表,以便每个列表元素标识原始数组的一个元素。

$indexes = 0..9 | ForEach-Object { ,@(0, $_) }
$rows[$indexes]

,@(0, $_)中的前导逗号阻止PowerShell通过将数据包装到另一个展开的数组中来展开数组@(0, $_)

基本上,您需要构建一个标识要访问的数组元素的元组列表,然后将该列表与索引运算符一起使用。

$rows[0][0..9]不起作用,因为你有一个二维数组,而不是一个锯齿状数组(一个数组数组)。

答案 1 :(得分:0)

由于您正在使用ADODB.Recordset对象,因此您可以使用特定方法来访问数据。

要从第一行获取值,请输入第一列:

$rows.GetValue(0,0)

第一行,第二栏:

$rows.GetValue(1,0)

第二行,第六栏:

$rows.GetValue(5,1)