在多次迭代中更新对象数组

时间:2016-08-01 08:09:28

标签: arrays powershell

我有一系列自定义对象:

$report = @()

foreach ($person in $mylist)
{
  $objPerson = New-Object System.Object

  $objPerson | Add-Member -MemberType NoteProperty -Name Name -Value $person.Name
  $objPerson | Add-Member -MemberType NoteProperty -Name EmployeeID
  $objPerson | Add-Member -MemberType NoteProperty -Name PhoneNumber

  $report += $objPerson
}

请注意,我没有为最后两个属性设置值。我之所以这样做是因为我试图制作一个矩阵,我可以很容易地看到这些是空白的地方(尽管我可以将它们设置为="&) #34;如果必须的话。)

然后,我希望迭代第二个数据集并在导出最终报告之前更新此数组中的这些值。例如。 (这个位几乎是伪代码,因为我不知道怎么做:

$phonelist = Import-Csv .\phonelist.csv

foreach ($entry in $phonelist)
{
  $name = $entry.Name
  if ($report.Contains(Name))
  {
    # update the PhoneNumber property of that specific object in the array with
    # another value pulled out of this second CSV
  }
  else
  {
    # Create a new object and add it to the report - don't worry I've already got
    # a function for this
  }
}

我猜测最后一点我可能需要我的if语句来返回索引,然后使用该索引来更新对象。但是我在这个阶段很失落。

为清楚起见,这是一个简化的例子。之后,我需要浏览包含员工ID的第二个文件,实际上我有大约10个需要从不同数据源更新所有的属性,并且数据源包含不同的人员列表,但有一些重叠。所以会有多次迭代。

我该怎么做?

2 个答案:

答案 0 :(得分:2)

我会将NSURLSession读入哈希表,例如像这样:

NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];
[[session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
    NSString *requestReply = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding];
    NSLog(@"requestReply: %@", requestReply);
}] resume];

并使用该哈希表在您创建时填写phonelist.csv中的电话号码:

$phonelist = @{}
Import-Csv .\phonelist.csv | ForEach-Object { $phonelist[$_.name] = $_.number }

您仍然可以在电话列表中查看报告中没有的条目,如下所示:

$report

答案 1 :(得分:0)

我将迭代$phonelist两次。第一次,您可以过滤名称在$myList中的所有电话实体,并创建所需的对象:

$phonelist = import-cse .\phonelist.csv
$report = $phonelist | Where Name -in ($mylist | select Name) | Foreach-Object {
    [PSCustomObject]@{
        Name = $_.Name
        PhoneNumber = $_.PhoneNumber
        EmployeeID = ''
    }
}

第二次过滤名称不在$myList的所有手机实体并创建新对象时:

$report +=  $phonelist | Where Name -NotIn ($mylist | select Name) | Foreach-Object {
    #Create a new object and add it to the report - don't worry I've already got a function for this
}