gpt4 book ai didi

algorithm - 通用排序函数接受 T,但要确保 T 具有可比性

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:01:09 24 4
gpt4 key购买 nike

我在 Dart 中对一个简单的 MergeSort 进行泛化。

只是作为一个占位符,我想到了 Node 的列表将为 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 ==等来处理这些情况,或operator <对于那些情况。我也有,因为我扩展了 Comparable,compareTo因为字符串。

我不确定如何适应传递给 Node、T 的类,我不知道是否有办法拥有它 expect数字、字符串等

完整的类(class)实现 + 可共享的 Dart 板: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 Wrapper 太多了?我有点觉得我可以去掉 Node 类,只得到一个 T 列表,但是当涉及到列表元素的比较时,这个问题就会被推到 MergeSort 中。

最佳答案

我想你要找的是

class Node<T extends Comparable>

class MergeSort<T extends Comparable>{

但是Comparable没有实现 >/< .如果你想使用这些,你可以创建你自己的父类(super class),并要求实现这个类。

关于algorithm - 通用排序函数接受 T,但要确保 T 具有可比性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35122891/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com