2015-10-16 79 views
-1

我有以下类:排序字符串[]的一子阵列的对象[]内

private class st_flow { 
    public string[] title; 
    public object[] details;    

    public st_flow() { 
     title= new string[0]; details = new object[0]; 
    } 
} 

st_flow.details保持一个字符串数组,我不知道数组的大小,它可以是任何地方从string[5]string[15]我的问题是我想排序这些数组。在某些情况下,我想对st_flow.details[0].mystring[6]进行排序,并在其他情况下对不同的索引进行排序。

编辑:我会尽力解释和回答大家的评论;我的st_flow.details是一个对象,因为它必须能够容纳任何类型的数组,每次它包含许多类型为字符串的数组,或者int等,但从未组合过类型。所以在我的代码,我有这样的事情:

st_flow flow = new st_flow(); 
string[] content = new string[15]; 
flow.details = new object[15]; 
//... 
// here I fill my content and each time add it to flow 
// this part is inside a loop that each time reset the 
// content and add it to flow incrementing the index 
//... 
flow.details[index] = content; 

在这一点上,本程序的,我们将有flow.details承载数量不明的阵列他们每个人的不明大小。我们实际上并不关心任何一方的规模。试想一下:

// this contains a content[15] string array which [4] value is 50 
flow.details[0]; 
// this also contains a content[15] string arraym with [4] value 80 
flow.details[1]; 
// i need to sort on this element and be able to do it both DESC or ASC 

我需要重新梳理我flow.details取决于(例如)content[4]不管它是字符串的值(列)或INT且不论数组的大小。希望澄清我的问题,谢谢。

+0

但是....你不能为了一个单一的元素,您要订购和基于什么什么收藏? – frikinside

+2

'在某些情况下,我想对st_flow.details [0] .mystring [6]进行排序 - 这没有多大意义。 'details [0]'只是一个'object',它不会有一个属性'mystring'。即使它确实如何“排序”呢? – Jamiec

+0

'public stats(){'看起来像一个构造函数,但我们在'st_flow'类中:一个错字? –

回答

0

我认为我已经解决了这种方式,还在测试它是否适用于所有情况:

 public class flow_dt : DataTable { 
      public flow_dt(string[] columns) { 
       this.Clear(); 
       foreach (string s in columns) { 
        this.Columns.Add(s, typeof(string)); 
       } 
      }    
     } 

这样我有标题和一个单一的元素的数据,并没有更多的阵列,我可以排序,甚至更轻松地筛选它,因为说我还在测试它

编辑:在这种情况下,我无法像这样排序的:

  DataView dv = flow.DefaultView; 
      dv.Sort = "total DESC"; 
      flow = (flow_dt)dv.ToTable(); 

我得到一个错误,因为不能执行转换,我不明白为什么,因为我的类继承自DataTable类型。

编辑2:这是排序部分解决方法:http://bytes.com/topic/visual-basic-net/insights/890896-how-add-sortable-functionallity-datatable

1

那么,在你的编辑的情况下,只是测试为String[]和排序:

Object[] details = new Object[] { 
    123, 
    new String[] {"x", "a", "y"},  // This String[] array 
    "bla-bla-bla", 
    new String[] {"e", "f", "d", "a"}, // and this one will be sorted 
    }; 

...

foreach (var item in details) { 
    String[] array = item as String[]; 

    if (null != array) 
     Array.Sort(array); 
    } 

...

// Test: print out sorted String[] within details 
Console.Write(String.Join(Environment.NewLine, details 
    .OfType<String[]>() 
    .Select(item => String.Join(", ", item)))); 

测试输出是(两个字符串数组被找到并排序)

a, x, y 
    a, d, e, f 
+0

因为我可以以这种方式主持任何类型的数组,请阅读我的编辑,谢谢。 – elnath78

+0

@ elnath78:你的编辑*完全*改变解决方案 –

+0

是的,请看看我的解决方案是否可以工作并解决有类而不是标准对象的问题。 – elnath78