Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# c如何使用来自多个文件的数据创建锯齿状数组_C#_Arrays - Fatal编程技术网

C# c如何使用来自多个文件的数据创建锯齿状数组

C# c如何使用来自多个文件的数据创建锯齿状数组,c#,arrays,C#,Arrays,我需要创建一个锯齿状数组,以便进行排序和处理。 我有7个文本文件,每个文件包含1022行数据。我需要的数组是由1022个数组组成的数组,每个数组包含7个元素,每个元素基本上是每个文件中的一行 我以前从未使用过锯齿阵列,虽然我可以在网上找到很多关于它们是如何制作的,但我似乎找不到任何关于如何填充它们的帮助。我可以制作数组并使其达到我想要的大小,但填充数组是我丢失的地方 非常感谢您在这方面给我的任何帮助。您可以使用它获取文件中所有行的可枚举序列: var source = new [] {

我需要创建一个锯齿状数组,以便进行排序和处理。 我有7个文本文件,每个文件包含1022行数据。我需要的数组是由1022个数组组成的数组,每个数组包含7个元素,每个元素基本上是每个文件中的一行

我以前从未使用过锯齿阵列,虽然我可以在网上找到很多关于它们是如何制作的,但我似乎找不到任何关于如何填充它们的帮助。我可以制作数组并使其达到我想要的大小,但填充数组是我丢失的地方

非常感谢您在这方面给我的任何帮助。

您可以使用它获取文件中所有行的可枚举序列:

var source = new []
{
    File.ReadLines(@"C:\dir\file1.txt"),
    File.ReadLines(@"C:\dir\file2.txt"),
    File.ReadLines(@"C:\dir\file3.txt"),
    File.ReadLines(@"C:\dir\file4.txt"),
    File.ReadLines(@"C:\dir\file5.txt"),
    File.ReadLines(@"C:\dir\file6.txt"),
    File.ReadLines(@"C:\dir\file7.txt"),
};
然后,您需要将每行1022行的七个序列转换为每行1022个七项的序列:

public static class Extensions
{
    public static IEnumerable<T[]> Pivot<T>(this IEnumerable<IEnumerable<T>> source)
    {
        if (source == null) throw new ArgumentNullException("source");
        return PivotIterator(source);
    }

    private static IEnumerable<T[]> PivotIterator<T>(IEnumerable<IEnumerable<T>> source)
    {
        var enumerators = new List<IEnumerator<T>>();
        try
        {
            foreach (IEnumerable<T> item in source)
            {
                enumerators.Add(item.GetEnumerator());
            }

            bool stillGoing = true;
            while (stillGoing)
            {
                foreach (IEnumerator<T> item in enumerators)
                {
                    if (!item.MoveNext())
                    {
                        stillGoing = false;
                        break;
                    }
                }
                if (stillGoing)
                {
                    var result = new T[enumerators.Count];
                    for (int index = 0; index < enumerators.Count; index++)
                    {
                        result[index] = enumerators[index].Current;
                    }

                    yield return result;
                }
            }
        }
        finally
        {
            foreach (IDisposable item in enumerators)
            {
                item.Dispose();
            }
        }
    }
}

LINQ可能是最简单的方法。如果您使用LINQ,您不必手动填充它。我从来没有使用LINQ的经验,您能解释一下我将如何使用它来做我想要的事情吗?这正是我所需要的。谢谢如果有简单的方法将其转换为输出int[][]数组而不是字符串?@iMxAndyy:假设文件的每一行都是有效的整数,则可以将源数组中的项更改为:file。ReadLines@C:\dir\file1.txt.Whereline=>!string.IsNullOrEmptyline.Selectint.Parse。显然,如果任何文件中的任何一行都不能转换为整数,那么您将得到一个异常。
string[][] result = source.Pivot().ToArray();