列表到数组(或?)以进行图形化

时间:2015-05-09 02:38:15

标签: c# model-view-controller

我想知道如何从列表中的每个项目中取一个元素并将其放入数组中以进行图形化。我想知道是否,因为我想在列表的每一行中绘制每个元素的图形,我可以一次完成所有这些或者我是否必须将每个元素分别拉出到它自己的数组中?

代码示例的几行是我首选的学习方法,非常感谢。

谢谢!

1 个答案:

答案 0 :(得分:0)

您可以在概念上将逻辑放在一个地方。

class DataIterator<T> : IEnumerable<T[]> {
    private readonly IList<IList<T>> _lists;

    public DataIterator(IList<IList<T>> lists) {
        Contract.Assert(lists.All(l => l.Count == lists[0].Count));
        _lists = lists; 
    }

    public IEnumerator<T[]> GetEnumerator() {
        var value = new List<T>(_lists.Count);
        for (var i = 0; i < _lists[0].Count; i++) {
            value.AddRange(_lists.Select(t => t[i]));
            yield return value.ToArray();
            value = new List<T>(_lists.Count);
        }
    }

    IEnumerator IEnumerable.GetEnumerator() {
        return GetEnumerator();
    }
}

这实现了IEnumerable<T>,因此您可以使用foreach循环。

使用示例:

var lists = new List<IList<int>> {
    new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }, 
    new List<int> { 11, 12, 13, 14, 15, 16, 17, 18, 19, 20 },  
    new List<int> { 21, 22, 23, 24, 25, 26, 27, 28, 29, 30 }
};

var iter = new DataIterator<int>(lists);

foreach (var items in iter) {
    Array.ForEach(items, i => {
        Console.Write("{0:D2} ", i);
    });
    Console.WriteLine();
}

输出:

01 11 21
02 12 12
...