c# - 如何比较多维字符串数组?

标签 c# arrays string multidimensional-array

我想比较 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 
--------------|------------------|------------

我想要的结果如下。

  1. Machine1 和 Pass1 的 Color1/Color3
  2. Machine2 和 Pass2 的 Color2/Color5
  3. Machine1 和 Pass2 的 Color4
  4. 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/

相关文章:

c# - WPF MessageBox 不等待结果 [WPF NotifyIcon]

c# - 是否可以减少我在此代码中使用的构造函数的数量?多个类的构造函数重载和转发

javascript - 在 javascript 或 angularjs 中分组

java - 将字符串转换为整数

c# - 规范化两个字符串然后比较

android - Android Studio 中的变量安全

c# - DateTime.Compare 没有按预期工作

c# - System.Timer 在 Metro 应用程序中不可用?我可以用什么来代替它?

java - 对象数组的初学者混淆

javascript - 从对象数组创建 PrimeNG TreeTable json