我正在尝试比较两张扑克牌结构,看看哪张扑克牌比另一张更好。我在网上找到的所有用于比较围棋结构的东西都是为了比较是否相等,但在这种情况下,我想说黑桃 A 比梅花 7 更有价值。
鉴于 Go 没有提供开箱即用的 Java 比较器接口,我想创建自己的函数来使用循环进行卡片比较,但我收到了错误消息:
# cards/card
card/Card.go:12:19: cannot use Ranks (type [13]string) as type []string in argument to indexOfSlice
card/Card.go:14:26: cannot use Ranks (type [13]string) as type []string in argument to indexOfSlice
card/Card.go:15:20: cannot use Suits (type [4]string) as type []string in argument to indexOfSlice
这是我的卡包:
package Card
var Suits = [4]string {"hearts", "spades", "diamonds", "clubs"}
var Ranks = [13]string {"2", "3", "4", "5", "6", "7", "8", "9", "10", "jack", "queen", "king", "ace"}
type Card struct {
Value string
Suit string
}
// if the index in the slices is greater for a than for b, then a must be greater value
func CardIsGreater(a Card, b Card) bool {
if indexOfSlice(a.Value, Ranks) > indexOfSlice(b.Value, Ranks) {
return true;
} else if indexOfSlice(a.Value, Ranks) == indexOfSlice(b.Value, Ranks) {
if indexOfSlice(a.Suit, Suits) > indexOfSlice(b.Suit, Suits) {
return true;
}
} else {
return false;
}
// lets ignore for a second that invalid ranks or suits will break this comparator
return false;
}
// finds the index of a suit or value in a slice
func indexOfSlice(element string, slice []string) int {
for i, _ := range slice {
if slice[i] == element {
return i;
}
}
return -1;
}
这是我的主要包:
package main
import (
"fmt"
"cards/card"
)
在这种情况下,如何让 indexOfSlice 辅助函数接受一个字符串切片作为其参数之一?如果我从谷歌搜索的首页阅读随机教程,它看起来应该可以工作:https ://nanxiao.gitbooks.io/golang-101-hacks/content/posts/pass-slice-as-a-函数参数.html
这个堆栈溢出答案解释说,Go 基本上是在强制执行类型安全,因为类型 []string 可以通过许多事情来满足:https ://stackoverflow.com/a/44606795/7255394 。如果是这种情况,那么我该如何解决这个问题?
此外,这甚至是比较结构的正确方法吗?在将 Ace of Spaces 与 Ace of Hearts 进行比较的情况下,需要在 Suits And Ranks 切片 (!!) 上循环 4 次才能实际进行比较。
慕村9548890
元芳怎么了
相关分类