我想比较 2 个字段。即机器和通行证。
我想根据 Machine 的值连接“Color”并传递。
--------------|------------------|------------
Color1 | Machine 1 | Pass 1
--------------|------------------|------------
Color2 | Machine 2 | Pass 1
--------------|------------------|------------
Color3 | Machine 1 | Pass 1
--------------|------------------|------------
Color4 | Machine 1 | Pass 2
--------------|------------------|------------
Color5 | Machine 2 | Pass 1
--------------|------------------|------------
Color6 | Machine 2 | Pass 2
--------------|------------------|------------
我想要的结果如下。
- Machine1 和 Pass1 的 Color1/Color3
- Machine2 和 Pass2 的 Color2/Color5
- Machine1 和 Pass2 的 Color4
- Machine2 和 Pass2 的 Color6
我不知道如何得到这个结果。尝试了很多方法但没有得到我想要的方式
最佳答案
首先,从概念上讲,您在这里真正拥有的是具有颜色、机器和传递值的复杂对象的单一维度。将其存储在二维数组中不是一个好主意。更好的表示是一些自定义类型的 List
,所以让我们先进行转换。
首先,我们将定义一个自定义类型来表示输入数据:
public class MachinePass//TODO consider renaming
{
public string Color { get; set; }
public string Machine { get; set; }
public string Pass { get; set; }
}
然后我们将解析我们的输入并将其放入适当的结构中:
var list = new List<MachinePass>();
for (int i = 0; i < data.GetLength(0); i++)
{
var next = new MachinePass();
next.Color = data[i, 0];
next.Machine = data[i, 1];
next.Pass = data[i, 2];
list.Add(next);
}
既然我们有了这个,我们就可以应用我们的业务逻辑了。在这种情况下,您想要做的是通过机器和传递对这些行进行分组,然后获取这些组的颜色。 GroupBy
LINQ 运算符使这变得 super 简单:
var query = list.GroupBy(row => new { row.Machine, row.Pass }
, row => row.Color);
然后我们可以按照定义的格式打印出这个查询的结果:
foreach(var group in query)
Console.WriteLine("{0} for {1} & {2}",
string.Join("/", group),
group.Key.Machine,
group.Key.Pass);
关于c# - 如何比较多维字符串数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20888059/