2013-10-07 33 views
0

我有值的二维数组是这样的:可以将2D阵列转换成可用列表

[0,1] = "A" 
[0,2] = "A" 
[0,3] = "A" 
[0,4] = "A" 
[0,5] = "A" 
.... 
[1,0] = "1" 
[1,1] = "2" 
[1,2] = "3" 
... 
[2,0] = "N" 
[2,1] = "N" 
[2,2] = "N" 
[2,3] = "N" 
... So on. 

有没有办法将其转换为3所单独列出像列表1将拥有的所有值[0,1 ] [0,2] ...等等。而List2的值为[1,0] [1,1] ...等等。当我试着这样:

List<string> cList = class.KVal.Cast<string>().ToList(); 

这给了我一个名单,但其无法使用,因为我不能在这个运行操作,因为它已经存储在一个列表中的所有值。

我想下面的代码:

var theList = Enumerable.Range(0, table.KVal.GetLength(1) - 1) 
             .Where(i=> table.KVal[0, i].Contains("A")) 
             .ToList(); 

而且不是一次,我得到了我想要的是从下一个二维数组像上面的代码中获取值的基本指标的所有A值从0旁边时,得到的值它来到1.我希望它得到完全相同的值上面的代码。

,所以我这样做:

var index = Enumerable.Range(0, table.KVal.GetLength(1) - 1) 
             .Where(i=> table.KVal[0, i].Contains("A")) 
             .ToArray(); 

我不知道怎么样,虽然我可以实现这个数组以得到其他值。

回答

2

您可以随时使用Enumerable.Range

var list1 = Enumerable 
    .Range(1, table.KVal.GetLength(1) - 1) // if you want to start at [0, 1] 
    .Select(i => table.KVal[0, i]) 
    .ToList(); 
var list2 = Enumerable 
    .Range(0, table.KVal.GetLength(1))  // if you want to start at [1, 0] 
    .Select(i => table.KVal[1, i]) 
    .ToList(); 

等。

请注意,您可以使用这种技术与ň迭代器遍历数组:

var results = 
    from x in Enumerable.Range(0, table.KVal.GetLength(0)) 
    from y in Enumerable.Range(0, table.KVal.GetLength(1)) 
    select table.KVal[x, y]; 

这是一个非常简单的例子,但它说明了如何在一个单一的LINQ访问多维数组查询。

+0

上面的代码给我列出了bool为什么是这样的?不应该返回字符串列表? – NoviceMe

+0

@NoviceMe它应该返回一个'IEnumerable '。你能准确地展示你如何使用它? –

+0

我想把上面的列表添加到变量l,像这样:l.AddRange(list);但它给我错误说,列表是布尔。 – NoviceMe