首先,这是为了模式匹配而设计的,因此请牢记这一点,因为它可能会有一个完全不同的解决方案,我想知道它。带有通配符的真值表(ish)
我有这一系列的数据(现在叫它mystring)。
string a = get_starting_letters(mystring)
string b = get_ending_letters(mystring)
bool c = check_code_appears(mystring)
.
.
.
and so on
我想有一个像这样工作的字典/真值表(*表示通配符)。
key (a,b,c...) value
"abc", *, True = "type a string"
"abc", "xyz", True = "type b string"
*, "xyz", True = "type m string"
这怎么可能在C#中实现?我知道这对F#来说很微不足道,但是这些代码将来可能会被仅知道C#的人更新。
我为什么要这样做?因为当前的代码越来越难以更新(太多嵌套if,else,else if),并且迄今为止只描述了几种“类型”(它将在几个月内加倍)。
其他的解决方案,我一直在思考:一个排序树/结构描述了由条件检查不同的可能变量:
b = "xyz"
a = "abc" <
mystring < b = "xxx"
a = "cda" <
b = *
然而,它似乎将有一个大的开销,速度对此很重要,另外树不会是二进制的,并且也需要处理通配符。
我没有时间给出完整答案,但我建议用三个键和一个实现IList/IDictionary的值来创建自己的类。你必须重载equals和一些其他的东西,但它会在功能上处理你的情况,并且对于大多数人的需求来说足够快(特别是如果你的集合类型很少的话)。几乎总是如此:先实现,稍后优化 – Bob2Chiv 2012-08-15 22:26:06
如果在F#中微不足道,请与不知道F#并使用F#的人配对。 – 2012-08-15 22:42:16