Giả sử chúng ta có một mảng với dữ liệu:yếu tố Lựa chọn từ mảng theo chỉ số quy định trong một mảng C#
double[] x = new double[N] {x_1, ..., x_N};
Và mảng có kích thước N
chứa nhãn tương ứng với các yếu tố của x
:
int[] ind = new int[N] {i_1, ..., i_N};
Cách nhanh nhất để chọn tất cả các yếu tố từ x
có nhãn nhất định I
theo ind
là gì?
Ví dụ,
x = {3, 2, 6, 2, 5}
ind = {1, 2, 1, 1, 2}
I = ind[0] = 1
Kết quả:
y = {3, 6, 2}
Rõ ràng, nó có thể được dễ dàng (nhưng không có hiệu quả và sạch sẽ) thực hiện với các vòng, nhưng tôi nghĩ rằng cần có cách làm thế nào để làm điều đó bằng .Where
và lambdas..Thanks
EDIT:
Câu trả lời được cung cấp bởi MarcinJuraszek là hoàn toàn chính xác, cảm ơn. Tuy nhiên, tôi đã đơn giản hóa câu hỏi với hy vọng rằng nó sẽ hoạt động trong tình huống ban đầu của tôi. bạn có thể xin hãy xem vấn đề là gì nếu chúng ta có các loại generic:
T1[] xn = new T1[N] {x_1, ..., x_N};
T2[] ind = new T2[N] {i_1, ..., i_N};
T2 I = ind[0]
Sử dụng các giải pháp cung cấp tôi nhận được một lỗi "Delegate 'System.Func' không mất 2 đối số":
T1[] y = xn.Where((x, idx) => ind[idx] == I).ToArray();
Thank you very much
Đã suy nghĩ về việc sử dụng Zip, nhưng quái: ngắn hơn thế này nó không phải là gonna get .. – flq
Nó là rất tốt đẹp , cảm ơn. Bạn có thể xem phiên bản câu hỏi đã chỉnh sửa không? –
Đối với generics, bạn phải chắc chắn 'T2 == T2' (hoặc' T2.Equals (T2) ') được xác định - thêm ràng buộc chung' nơi T2: IEquatable' – MarcinJuraszek