我正在使用 SpecExplorer 生成测试套件。我有一个函数应该返回一组排序的字符串(与 List.Sort() 相同的排序行为)。
在模型中,我使用的是 Microsoft.Modeling.Sequence。不可能使用列表,因为如果您使用列表,SpecExplorer 无法评估当前状态...
我的问题是: 如何在不使用列表的情况下返回已排序的 Microsoft.Modeling.Sequence ...我知道我可以将所有字符串相互比较,并且在每个比较步骤中创建一个新的不可变序列,但这似乎太复杂了。有更简单的解决方案吗?
题外话:没有 SpecExplorer 标签...
编辑:
当前工作示例
Sequence<string> toSort = new Sequence<string>(new string[] { "Delta", "delta", "Alpha", "Gamma", "Beta" });
Sequence<string> sorted = new Sequence<string>();
while (toSort.Count != 0)
{
int currentMaxIndex = -1;
for (int i = 0; i < toSort.Count; i++)
if (currentMaxIndex == -1 || toSort[i].CompareTo(toSort[currentMaxIndex]) < 0)
currentMaxIndex = i;
sorted = sorted.Add(toSort[currentMaxIndex]);
toSort = toSort.RemoveAt(currentMaxIndex);
}
最佳答案
可能有些问题:
- 对于应该返回排序序列的函数:此函数是否在模型中使用,即在规则方法中使用,序列是规则参数吗?
- 假设是:您为什么要对排序序列建模?根据定义,在序列中,顺序很重要。如果您对序列进行排序,顺序并不重要,因为顺序始终相同:定义的排序顺序?
- 这就是 Microsoft.Modeling.Sequence 没有排序功能并且拥有一个不是很重要的原因。
- 如果是这种情况,您可以在模型中使用 Microsft.Modeling.Set 类型的规则参数。您的模型探索将变得更小、更快和更清晰,任何绳索场景也将以某种方式尝试分割状态空间。
- 如果您的序列不是规则参数,您可以轻松使用任何 C# 代码(例如列表)。 Spec Explorer 应该没有任何问题。
- 如果由于未知原因您确实需要排序,也许 Linq 可以使您的代码更短、更好...
关于c# - SpecExplorer 如何对 Microsoft.Modeling.Sequence 进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24258565/