0

我有一个二维数组,其值如下:

[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 个单独的列表,例如 list1 将具有 [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();

我不确定如何实现这个数组来获取其他值。

4

1 回答 1

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

等等。

请注意,您实际上可以使用此技术来遍历具有n 个迭代器的数组:

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 查询中访问多维数组。

于 2013-10-07T19:10:44.793 回答