use*_*901 2 c# arrays string multidimensional-array
我想比较2个字段.即机器和通行证.
我想连接'Color'取决于Machine和pass的值.
--------------|------------------|------------
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
--------------|------------------|------------
Run Code Online (Sandbox Code Playgroud)
我想要的结果如下.
我不知道如何得到这个结果.尝试了许多方法,但没有按照我想要的方式得到它
首先,从概念上讲,你真正拥有的是复杂对象的单个维度,它具有颜色,机器和传递值.将其存储在二维数组中并不是一个好主意.更好的表示是一种List自定义类型,所以让我们先做转换.
首先,我们将定义一个自定义类型来表示输入数据:
public class MachinePass//TODO consider renaming
{
public string Color { get; set; }
public string Machine { get; set; }
public string Pass { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
然后我们将解析我们的输入并将其放入适当的结构中:
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);
}
Run Code Online (Sandbox Code Playgroud)
现在我们有了这个,我们可以应用我们的业务逻辑.在这种情况下,您要做的是通过机器和传递对这些行进行分组,然后获取这些组的颜色.在GroupByLINQ操作使这个超级简单:
var query = list.GroupBy(row => new { row.Machine, row.Pass }
, row => row.Color);
Run Code Online (Sandbox Code Playgroud)
然后我们可以用定义的格式打印出这个查询的结果:
foreach(var group in query)
Console.WriteLine("{0} for {1} & {2}",
string.Join("/", group),
group.Key.Machine,
group.Key.Pass);
Run Code Online (Sandbox Code Playgroud)