总结 C# 中的多维数组



我正在尝试找到总结多维数组的最佳(最快)方法,然后将其传递到对象中。

例如,如果我有包含类似于以下内容的数据的object[,] Data

John,Utah,Huntsville,0120152,60
John,Utah,Huntsville,06122013,40
Dallin,Maryland,CityTown,10202012,30
Aaron,Connecticut, Harbourville,12122017,100
Dallin,Maryland,CityTown,04232011,8
Aaron,Virginia,GeorgeTown,02212013,200

这将传递到一个对象中,该对象将被定义为如下所示的内容:

string name, string state, string city, List<int> date, List<double> total

因此,数据的表示形式可能如下所示:

Dallin,Maryland,CityTown
                         04232011, 8
                         10202012, 30                          
John,Utah,Huntsville,
                    0120152, 60
                    06122013,40

我知道我可以从每个列中获取不同的项目,然后使用 For 和 if 语句,但作为编程新手并且拥有非常大的数据集,我有点担心需要多长时间。作为一个多维数组也使得排序变得困难。因此,任何关于如何处理这个问题的信息都将不胜感激。

您是否必须将数据放在多维数组中? 例如,如果您按如下方式构建数据,该怎么办:

public class Activity
{
    public int ActivityDate { get; get; }
    public double ActivityTotal { get; set; }
}
public class Person
{
    public string Name { get; set; }
    public string State { get; set; }
    public string City { get; set; }
    public List<Activity> { get; set; }
}

将数据输入到这种类型的结构中应该相对容易,然后您将通过 LINQ 获得简单的排序、汇总等额外好处。

当您说"大型"数据集时... 多大才算大?

编辑:

很公平... 我没有意识到你没有控制如何将数据加载到你的对象中。

也就是说,也许域对象看起来很简单:

public class Person
{
    public string Name { get; set; }
    public string State { get; set; }
    public string City { get; set; }
    public List<int> Date { get; set; }
    public List<double> Total { get; set; }
}

这是一个非常粗略的示例,说明如何将Data对象转换为此类。 请注意,这绝对不会妨碍错误捕获或类型验证:

List<Person> p = new List<Person>();
for (int i = 0; i < Data.Length; i++)
{
    p.Add(new Person()
    {
        Name = (string)Data[i, 0],
        State = (string)Data[i, 1],
        City = (string)Data[i, 2],
        Date = (List<int>)Data[i, 3],
        Total = (List<double>)Data[i, 4]
    });
}

这是一个使用 LINQ 的解决方案(这实际上是一行代码 :-) )

var results = File.ReadAllLines(@"Your file path.txt")
        .Select(record => record.Split(','))
        .Select(tokens => new { Name1 = tokens[0], Name2 = tokens[1], Name3 = tokens[2], Group1 = tokens[3], Group2 = tokens[4] })
        .GroupBy(x => new { x.Name1, x.Name2, x.Name3 }).ToList();            
        foreach(var result in results)
        {
            Console.WriteLine(result.Key.Name1);
            Console.WriteLine(result.Key.Name2);
            Console.WriteLine(result.Key.Name3);                
            foreach(var groupItem in result.ToList())
            {
                Console.WriteLine(groupItem.Group1);
                Console.WriteLine(groupItem.Group2);
            }
        }

这些值将根据此要求进行分组。

达林,马里兰州,城镇

                     04232011, 8
                     10202012, 30                          

约翰,犹他州,亨茨维尔,

                0120152, 60
                06122013,40

相关内容

  • 没有找到相关文章

最新更新