2010-08-22 14 views
5

Giả sử tôi có một thói quen lấy giá trị liệt kê làm đối số và trả về một Boolean ... và tôi muốn kiểm tra một tập hợp các giá trị liệt kê đó để xem chúng có đúng không. Có cách nào để làm điều đó không. Đây là nỗ lực "trường học cũ" của tôi mà dường như không phải là scala-ish:Cách Scala để thay đổi điều này thành một danh sách?

def allUnitQueuesEmpty(): Boolean = 
    (getQueue(QID.CPU).isEmpty() && 
     getQueue(QID.L1C_I).isEmpty() && 
     getQueue(QID.L1D_I).isEmpty() && 
     getQueue(QID.L1VC_I).isEmpty() && 
     getQueue(QID.L1C_D).isEmpty() && 
     getQueue(QID.L1D_D).isEmpty() && 
     getQueue(QID.L1VC_D).isEmpty() && 
     getQueue(QID.L1WB_D).isEmpty() && 
     getQueue(QID.L2C).isEmpty() && 
     getQueue(QID.L2WB).isEmpty() && 
     getQueue(QID.MEM_RD).isEmpty() && 
     getQueue(QID.MEM_WRT).isEmpty()); 

Điều này có thể được thực hiện với Danh sách không?

-Jay

Trả lời

5

Tất cả các bộ sưu tập của Scala có forallexists phương pháp mà xác định liệu bộ sưu tập mà họ đang áp dụng thỏa mãn vị cung cấp như một đối số (trên các yếu tố của bộ sưu tập) cho mỗi yếu tố (forall) hoặc cho ít nhất một phần tử (exists).

22

Không cần danh sách, thực sự. QID.values() trả về một mảng của tất cả QID giá trị, và một mảng có thể được ngầm chuyển đổi sang một bộ sưu tập Scala, cho phép bạn xác định

def allUnitQueuesEmpty(): Boolean = QID.values.forall(v => getQueue(v).isEmpty) 

Nếu bạn chỉ cần một số những giá trị đó, điều này sẽ làm việc thay vì:

import QID._ 
def l1UnitQueuesEmpty(): Boolean = Array(L1C_I, L1D_I, L1VC_I).forall(v => getQueue(v).isEmpty) 
Các vấn đề liên quan