2012-05-01 19 views

Trả lời

4

Không có một cách sạch để làm điều đó bằng cách sử dụng các thư viện lõi như bây giờ, nhưng nếu bạn cuộn của riêng bạn foldLeft sau đó là

main() { 
    var sum = foldLeft([1,2,3], 0, (val, entry) => val + entry); 
    print(sum); 
} 

Dynamic foldLeft(Collection collection, Dynamic val, func) { 
    collection.forEach((entry) => val = func(val, entry)); 
    return val; 
} 

Tôi đã nói chuyện với đội Dart về việc thêm foldLeft đến các bộ sưu tập cốt lõi và tôi hy vọng nó sẽ sớm có mặt ở đó.

+0

Điều này có thể được giải quyết bằng cách thêm chức năng chèn vào giao diện bộ sưu tập như trong Ruby. –

+1

Đó là một số mã rất đẹp, Lars. Không chỉ là những gì tôi đang tìm kiếm, bây giờ tôi hiểu gấp. –

+1

Bạn chắc chắn có thể làm điều đó với một hàm ẩn danh, có hoặc không có bất kỳ mã thư viện nào để làm điều đó, chỉ bằng cách gạch chân mã trong foldLeft ở trên. Và bạn sẽ luôn luôn cần một biến, trừ khi bạn quá thông minh với đệ quy. Ngoài ra, bạn cũng có thể chỉ cần làm điều đó với một cho (var mỗi trong ...) thay vì forEach, và áp dụng các chức năng trong cơ thể của vòng lặp for. Hoặc là làm việc. –

4

Tôi vẫn nghĩ rằng cách rõ ràng là sạch hơn và dễ hiểu hơn cho vấn đề cụ thể này.

num sum = 0; 
[1, 2, 3].forEach((num e){sum += e;}); 
print(sum); 

hoặc

num sum = 0; 
for (num e in [1,2,3]) { 
    sum += e; 
} 
3
int sum = [1, 2, 3].fold(0, (previous, current) => previous + current); 

hoặc với tên biến ngắn hơn để làm cho nó chiếm ít phòng:

int sum = [1, 2, 3].fold(0, (p, c) => p + c); 
Các vấn đề liên quan