2015-12-14 13 views
8

Tiền thân: Tôi chỉ mới bắt đầu bị ướt chân bằng golang.Có một hàm min được xây dựng cho một lát các đối số int hoặc một số biến đối số int trong golang không?

Điều này có thể chứng minh là một câu hỏi ngớ ngẩn vì việc thực hiện các tính toán này khá dễ dàng nhưng tôi vẫn sẽ hỏi nó khi tôi không tìm thấy câu trả lời khi Google.

Có được xây dựng trong chức năng trả về giá trị tối thiểu của một lát đối số int:

func MinIntSlice(v []int) (m int) { 
    if len(v) > 0 { 
     m = v[0] 
    } 
    for i := 1; i < len(v); i++ { 
     if v[i] < m { 
      m = v[i] 
     } 
    } 
    return 
} 

HOẶC tối thiểu của một số biến của tham số int:

func MinIntVarible(v1 int, vn ...int) (m int) { 
    m = v1 
    for i := 0; i < len(vn); i++ { 
     if vn[i] < m { 
      m = vn[i] 
     } 
    } 
    return 
} 

Nếu không, là "quy ước" tốt nhất chỉ đơn giản là tạo một gói có chứa những người trợ giúp như thế này?

Trả lời

14

Không có tích hợp sẵn cho việc này.

Nếu bạn chỉ cần chức năng này trong một gói, bạn có thể viết chức năng chưa được xuất (ví dụ: minIntSlice).

Nếu bạn cần chức năng này trong nhiều gói, bạn có thể tạo gói và đặt các chức năng tương tự tại đó. Bạn nên xem xét làm cho gói này nội bộ (https://golang.org/s/go14internal).

Một vài gợi ý làm thế nào để cải thiện mã của bạn:

  1. MinIntSlice sẽ trở lại 0 cho một lát trống. Tuy nhiên 0 cũng là một phần tử min hợp lệ. Tôi nghĩ gọi hoảng loạn trên một lát trống là một lựa chọn tốt hơn.

  2. Sử dụng dải vòng lặp:

    for _, e := range v { 
        if e < m { 
         m = e 
        } 
    } 
    
+0

Đó là một mảnh hữu ích của thông tin phản hồi . Tôi đã không được tiếp xúc với "phạm vi". – Jesse

+0

Cảm ơn bạn đã chọn con trỏ đến các gói "nội bộ". Tôi đã sao chép các chức năng không được báo cáo như thế này, và nội bộ trông giống như cách để duy trì tốt hơn những điều này. –

0

Như @kostya tuyên bố một cách chính xác không có built-in phút hoặc chức năng tối đa trong Golang.

Tuy nhiên, tôi xin đề nghị một giải pháp hơi khác nhau:

func MinMax(array []int) (int, int) { 
    var max int = array[0] 
    var min int = array[0] 
    for _, value := range array { 
     if max < value { 
      max = value 
     } 
     if min > value { 
      min = value 
     } 
    } 
    return min, max 
} 

Với rằng vấn đề của một lát trống được giải quyết: một lỗi runtime xuất hiện (index out of range)

Các vấn đề liên quan