簡體   English   中英

通用排序功能接受T,但要確保T可比

[英]Generic Sorting function accepts T, but want to ensure T is comparable

我在Dart中做了一個簡單的MergeSort的泛化。

我只是想成為一個占位符,所以我認為NodeList<T>可以對List<T>進行足夠的包裝。 由於T是對象,因此它本身不具有compareTo,<,>,<=等,因為它不是數字或字符串。

我如何刪除這些警告。

class Node<T> extends Comparable {
  T _value;
  Node(T value){
    _value = value;
  }
  //.....

}

class MergeSort<T>{
  list<Node<T>> _list;

  MergeSort(List<Node<T>> list){
    _list = list;

  }

  List<Node<T>> Sort( List<Node<T>> list ){
    _list = list;
    //.....
  }
}

我遇到的問題是在MergeSort中,我需要比較節點,這已經足夠了。 我實現operator == etc來處理這些情況,或者實現operator <來處理這些情況。 自從我擴展了Comparable之后,我也有了String以來的compareTo

我不確定如何適應傳遞給Node,T的類,而且我不知道是否有辦法讓它expect num,string等。

完整的類實現+共享的dartpad: https ://dartpad.dartlang.org/645157fb547da482fc2b

class Node<T> extends Comparable{
  T _value;
  Node(T item){
    _value = item;
  }

  T getValue () => _value;

  bool operator ==(other) => identical(this, other);
  bool operator <( other){
    if (other is! T){
      return false;
    }

    //other is of same type, T.
    if (_value < (other as Node<T>).getValue()){
      return true;
    }
    return false;
  }
  bool operator <= (other){
    return (this == other) || (this < other);
  }

  int compareTo (other){
    if (this == other){ 
      return 0;  
    }
    if (this < other) { 
      return -1; 
    }
    return 1;  
  }
}

也許有一個節點包裝太多了? 我有點覺得我也許可以剝離Node類,而只擁有一個T列表,但是當涉及比較列表元素時,該問題將被推送到MergeSort中。

我想你要找的是

class Node<T extends Comparable>

class MergeSort<T extends Comparable>{

Comparable沒有實現> / < 如果要使用它們,則可以創建自己的超類,並要求實現該類。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM