在C#中总结多维数组

时间:2015-06-19 01:54:26

标签: c# arrays sorting object multidimensional-array

我试图找到最好(最快)的方法来总结一个多维数组,然后将其传递给一个对象。

例如,如果我的ad_group_id包含类似于:

的数据
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

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

2 个答案:

答案 0 :(得分:0)

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

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可以获得简单排序,汇总等的额外好处。

当你说“大”数据集时......有多大?

编辑:

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

也就是说,Domain对象可能看起来像这样:

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]
    });
}

答案 1 :(得分:0)

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

-(void)populateData{
   CSVParser *parser = [CSVParser sharedInstance];
   NSArray *ports = [parser parseCSVFile: @"ports"];

   for(NSDictionary *value in ports){
       [self addPort:value];
   }

}

-(void)addPort:(NSDictionary*)value{
   //say you created a table ports
    NSDictionary *sql=[self createInsertSQLWithValue:value forTable:@"ports"];

    BOOL inserted=[self.db executeUpdate:[sql objectForKey:@"sql"] withArgumentsInArray:[sql objectForKey:@"args"]];
    if(inserted){
        NSLog(@"Port Inserted");
    }
}

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

  

达林,马里兰州,CityTown

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);
            }
        }
     

约翰,犹他州,Huntsville的

                     04232011, 8
                     10202012, 30