Làm cách nào để xóa các bản sao khỏi mảng PowerShell?
$a = @(1,2,3,4,5,5,6,7,8,9,0,0)
Làm cách nào để xóa các bản sao khỏi mảng PowerShell?
$a = @(1,2,3,4,5,5,6,7,8,9,0,0)
Câu trả lời:
Sử dụng Select-Object
(có bí danh là select
) với công -Unique
tắc; ví dụ:
$a = @(1,2,3,4,5,5,6,7,8,9,0,0)
$a = $a | select -Unique
-u
. select -u
Tôi sẽ sử dụng điều này trên một dòng lệnh, nhưng được viết bằng mã, nên sử dụng từ ngữ PS đầy đủ:Select-Object -Unique
Một tùy chọn khác là sử dụng Sort-Object
(có bí danh sort
, nhưng chỉ trên Windows) với công -Unique
tắc, kết hợp việc sắp xếp với loại bỏ các bản sao:
$a | sort -unique
Trong trường hợp bạn muốn được chứng minh hoàn toàn bằng bom, đây là những gì tôi sẽ khuyên:
@('Apples', 'Apples ', 'APPLES', 'Banana') |
Sort-Object -Property @{Expression={$_.Trim()}} -Unique
Đầu ra:
Apples
Banana
Điều này sử dụng Property
tham số để đầu tiên Trim()
các chuỗi, vì vậy các khoảng trắng thừa bị loại bỏ và sau đó chỉ chọn các -Unique
giá trị.
Thông tin thêm về Sort-Object
:
Get-Help Sort-Object -ShowWindow
Get-Unique
không hoạt động vì không gian
$a | sort -unique
Điều này hoạt động với phân biệt chữ hoa chữ thường, do đó loại bỏ các chuỗi trùng lặp với các trường hợp khác nhau. Đã giải quyết vấn đề của tôi.
$ServerList = @(
"FS3",
"HQ2",
"hq2"
) | sort -Unique
$ServerList
Các kết quả trên:
FS3
HQ2
Nếu danh sách được sắp xếp, bạn có thể sử dụng lệnh ghép ngắn Get-Unique :
$a | Get-Unique
Với phương pháp của tôi, bạn có thể loại bỏ hoàn toàn các giá trị trùng lặp, để lại cho bạn các giá trị từ mảng chỉ có tổng số 1. Không rõ đây có phải là điều OP thực sự muốn hay không, tuy nhiên tôi không thể tìm thấy ví dụ về giải pháp này trực tuyến. nó đây.
$array=@'
Bananna
Apple
Carrot
Pear
Apricot
Pear
Bananna
'@ -split '\r\n'
($array | Group-Object -NoElement | ?{$_.count -eq 1}).Name
Cho dù bạn đang sử dụng SORT -UNIQUE
, SELECT -UNIQUE
hoặc GET-UNIQUE
từ Powershell 2,0-5,1, tất cả các ví dụ đưa ra là trên mảng cột duy nhất. Tôi vẫn chưa làm cho điều này hoạt động trên Mảng có nhiều Cột để LOẠI BỎ Hàng trùng lặp để để lại các lần xuất hiện đơn lẻ của Hàng trên các Cột nói trên hoặc phát triển giải pháp tập lệnh thay thế. Thay vào đó, những lệnh ghép ngắn này chỉ trả về Hàng trong Mảng xảy ra MỘT LẦN với sự xuất hiện số ít và loại bỏ mọi thứ có bản sao. Thông thường, tôi phải loại bỏ các bản sao theo cách thủ công khỏi đầu ra CSV cuối cùng trong Excel để hoàn thành báo cáo, nhưng đôi khi tôi muốn tiếp tục làm việc với dữ liệu đã nói trong Powershell sau khi loại bỏ các bản sao.
Get-Unique
(hoặcgu
) nếu mảng của bạn đã được sắp xếp.