2015-01-09 73 views
0

我试图实现一个功能,这将在阵列发现的最小价值的指标:不能援引“<”与类型的参数列表“(T,T)”

func minIndex<T: Equatable>(array: [T]) -> Int { 
    var minValue = array[0] 
    var minIndex = Int() 

    for (index, item) in enumerate(array) { 
     if item < minValue as T { 
      minValue = item 
      minIndex = index 
     } 
    } 
    return minIndex 
} 

但我有一个错误“

if item < minValue as T { 

回答

2

您需要的元素为Comparable,以使他们能够与<进行比较:有型“(T,T)””的参数列表上线不能援引“<”

func minIndex<T: Comparable>(array: [T]) -> Int { 
    var minValue = array[0] 
    var minIndex = Int() 

    for (index, item) in enumerate(array) { 
     if item < minValue { // Your " as T" cast is not needed here 
      minValue = item 
      minIndex = index 
     } 
    } 
    return minIndex 
} 

Equatable仅意味着它们可以与==进行比较。

+0

谢谢!如果我在Array扩展中实现它,那么如何?与此变化: FUNC minIndex () - >内部{ 变种minValue(最小值)=自[0] ... 为 在枚举(自)(指数,项目){ 如果项 2015-01-09 21:11:04

+0

@AlesTsurko:您(当前)无法定义只能应用于受限数组类型的扩展方法(例如,要求元素为Comparable)。有关类似问题,请参阅http://stackoverflow.com/questions/24938948/array-extension-to-remove-object-by-value/24939100#24939100。 – 2015-01-09 21:14:24

相关问题