C# 如何按先进先出对数据列进行排序
我不确定这个问题是否正确,但这正是我想做的 我有一个导入/导出工具,可以使用矩阵电子表格模板导入/导出TestRail中的测试用例,该模板如下所示(AP=适用,NA=不适用): 因此,一旦进入TestRail,它看起来是这样的:C# 如何按先进先出对数据列进行排序,c#,algorithm,sorting,datatable,datacolumn,C#,Algorithm,Sorting,Datatable,Datacolumn,我不确定这个问题是否正确,但这正是我想做的 我有一个导入/导出工具,可以使用矩阵电子表格模板导入/导出TestRail中的测试用例,该模板如下所示(AP=适用,NA=不适用): 因此,一旦进入TestRail,它看起来是这样的: 第一节 测试2 测试3 测试4 第二节 测试1 测试3 测试4 测试5 第三节 测试1 测试2 测试3 测试5 但当我从TestRail导出时,列的顺序与导入的顺序不同: Sections Test2 | Test3 | Test4 | T
- 第一节
- 测试2
- 测试3
- 测试4
- 第二节
- 测试1
- 测试3
- 测试4
- 测试5
- 第三节
- 测试1
- 测试2
- 测试3
- 测试5
Sections Test2 | Test3 | Test4 | Test1 | Test5
Section 1 AP | AP | AP | |
Section 2 | AP | AP | AP | AP
Section 3 AP | AP | | AP | AP
这是我到目前为止使用DataTable并试图检测之前的测试用例的代码。。。但经过一些测试,它根本不准确/无法正常工作。。。尤其是大量的截面和试验:
String previousTC = String.Empty;
// For each Test Case
// Adds column to the Matrix table for each new Test Cases
foreach (var tcase in currentCases)
{
if (!dtMatrix.Columns.Contains(tcase.title))
{
// Adds a new Column if TestCases does not exist
dtMatrix.Columns.Add(tcase.title, typeof(string));
}
else
{
if (dtMatrix.Columns.Contains(previousTC))
{
// Gets the position of the previous TestCase
// in order to put the new one right after
var previous = dtMatrix.Columns.IndexOf(previousTC);
var current = dtMatrix.Columns.IndexOf(tcase.title);
if (previous >= current)
{
dtMatrix.Columns[current].SetOrdinal(previous);
}
}
}
previousTC = tcase.title;
}
请注意,Test1到test5只是为了解释我的问题,可以是任何东西,不能按字母顺序排列
所以我需要一些帮助来找到正确的算法来解决我的排序顺序问题
非常感谢
编辑:
我想也许,基于TestRail的套件,我可以找到一种合并它们的方法。。然后跟踪每个合并的测试用例列。因此,如果这些列不应该按字母顺序出现,并且它们不应该按与当前用例相同的顺序出现,那么它们应该按什么顺序出现?按ID。。。每个测试用例都有自己的ID,按照每个部分的顺序排列。我需要找到一种方法来跟踪它们的导入顺序。
String previousTC = String.Empty;
// For each Test Case
// Adds column to the Matrix table for each new Test Cases
foreach (var tcase in currentCases)
{
if (!dtMatrix.Columns.Contains(tcase.title))
{
// Adds a new Column if TestCases does not exist
dtMatrix.Columns.Add(tcase.title, typeof(string));
}
else
{
if (dtMatrix.Columns.Contains(previousTC))
{
// Gets the position of the previous TestCase
// in order to put the new one right after
var previous = dtMatrix.Columns.IndexOf(previousTC);
var current = dtMatrix.Columns.IndexOf(tcase.title);
if (previous >= current)
{
dtMatrix.Columns[current].SetOrdinal(previous);
}
}
}
previousTC = tcase.title;
}