Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/286.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.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# 如何压缩4个或更多阵列_C#_.net - Fatal编程技术网

C# 如何压缩4个或更多阵列

C# 如何压缩4个或更多阵列,c#,.net,C#,.net,我正在阅读xml。根据这个xml,我将4个参数存储到数组中 如何将这些数组组合成一个foreach循环,以便将这些数据存储到SQL中并使用它们 我设法为两个数组创建了.Zip。可以这样组合4个阵列吗?基本上,我想将id和recDate添加到numbersAndWords数组中 XmlDocument doc = new XmlDocument(); doc.LoadXml(result); var cislo = new List<string>(

我正在阅读xml。根据这个xml,我将4个参数存储到数组中

如何将这些数组组合成一个foreach循环,以便将这些数据存储到SQL中并使用它们

我设法为两个数组创建了.Zip。可以这样组合4个阵列吗?基本上,我想将id和recDate添加到numbersAndWords数组中

XmlDocument doc = new XmlDocument();

        doc.LoadXml(result);

        var cislo = new List<string>();
        var zprava = new List<string>();
        var id = new List<string>();
        var recDate = new List<string>();

        XmlNodeList number = doc.GetElementsByTagName("SenderNumber");
        for (int i = 0; i < number.Count; i++)
        {
            cislo.Add(number[i].InnerXml);
        }

        XmlNodeList text = doc.GetElementsByTagName("TextDecoded");
        for (int i = 0; i < text.Count; i++)
        {
            zprava.Add(text[i].InnerXml);
        }

        XmlNodeList idNum = doc.GetElementsByTagName("ID");
        for (int i = 0; i < idNum.Count; i++)
        {
            id.Add(idNum[i].InnerXml);
        }

        XmlNodeList recDateTime = doc.GetElementsByTagName("ReceivingDateTime");
        for (int i = 0; i < recDateTime.Count; i++)
        {
            recDate.Add(recDateTime[i].InnerXml);
        }



        var numbersAndWords = cislo.Zip(zprava, (n, w) => new {Number = n, Word = w});
        cs.Open();
        foreach (var nw in numbersAndWords)
        {
            MessageBox.Show(nw.Number);
            MessageBox.Show(nw.Word);
        }
XmlDocument doc=新的XmlDocument();
doc.LoadXml(结果);
var cislo=新列表();
var zprava=新列表();
var id=新列表();
var recDate=新列表();
XmlNodeList编号=doc.GetElementsByTagName(“发件人编号”);
for(int i=0;inew{Number=n,Word=w});
cs.Open();
foreach(数值和文字中的变量nw)
{
MessageBox.Show(nw.Number);
MessageBox.Show(nw.Word);
}

尝试使用以下方法组合这些阵列:

private static T[] Combine<T>(params IEnumerable<T>[] items) =>
                              items.SelectMany(i => i).Distinct().ToArray();

如果您确定所有元素计数相等,请创建类并填充它:

class Record
{
   public string cislo;
   public string zprava;
   public string id;
   public string recDate;
}
.....
List<Record> records = new List<Record>();
    XmlNodeList number = doc.GetElementsByTagName("SenderNumber");
    for (int i = 0; i < number.Count; i++)
    {
       records.Add(new Record { cislo = number[i].InnerXml });
    }

    XmlNodeList text = doc.GetElementsByTagName("TextDecoded");
    for (int i = 0; i < text.Count; i++)
    {
        records[i].zprava = text[i].InnerXml;
    }
课堂记录
{
公共字符串cislo;
公共字符串zprava;
公共字符串id;
公共字符串记录日期;
}
.....
列表记录=新列表();
XmlNodeList编号=doc.GetElementsByTagName(“发件人编号”);
for(int i=0;i

etc

您可以使用它的一个实现来压缩四个枚举,并返回
ValueTuple
元素的一个枚举:

public static IEnumerable<(T, T, T, T)> Zip4<T>(IEnumerable<T> source1,
    IEnumerable<T> source2,
    IEnumerable<T> source3,
    IEnumerable<T> source4)
{
    using (IEnumerator<T> e1 = source1.GetEnumerator(),
        e2 = source2.GetEnumerator(),
        e3 = source3.GetEnumerator(),
        e4 = source4.GetEnumerator())
    {
        while (e1.MoveNext() && e2.MoveNext() && e3.MoveNext() && e4.MoveNext())
        {
            yield return (e1.Current, e2.Current, e3.Current, e4.Current);
        }
    }
}

由于您正在构建4个列表,为什么不创建1个对象列表,并更新这些对象呢?另外,您似乎正在解析同一个文档,为什么不正确地反序列化它并避免所有这些麻烦呢?换句话说,您已经通过编写难以处理的代码来解析XML文档来构建了一个问题,现在您正试图找到一种处理该问题的好方法。不要,摆脱这个问题并使用xml反序列化,这将为您提供一个具有属性的对象列表,这正是您可能希望ZIP生成的结果。例如,如果一个这样的对象缺少其中一个属性,您的代码会处理它吗?那么索引不会被扭曲吗?@LasseVågsætherKarlsen我认为几乎不可能从xml中漏掉一些东西。至少这是不可能的。很好,它合并成一个数组。现在是否可以为每个项目获取messagebox?我知道我不需要组合MessageBox.Show(id[1].toString());,这样的数组就可以做到这一点;,但我不知道要装多少东西。如果我想执行这样的SQL命令:将值(“+id+”、“+zprava+”、“+cislo+”)插入到contacts(id、zprava、cislo)中,如果您想执行这样的语句,这是另一个问题。我会更新我的答案。
class Record
{
   public string cislo;
   public string zprava;
   public string id;
   public string recDate;
}
.....
List<Record> records = new List<Record>();
    XmlNodeList number = doc.GetElementsByTagName("SenderNumber");
    for (int i = 0; i < number.Count; i++)
    {
       records.Add(new Record { cislo = number[i].InnerXml });
    }

    XmlNodeList text = doc.GetElementsByTagName("TextDecoded");
    for (int i = 0; i < text.Count; i++)
    {
        records[i].zprava = text[i].InnerXml;
    }
public static IEnumerable<(T, T, T, T)> Zip4<T>(IEnumerable<T> source1,
    IEnumerable<T> source2,
    IEnumerable<T> source3,
    IEnumerable<T> source4)
{
    using (IEnumerator<T> e1 = source1.GetEnumerator(),
        e2 = source2.GetEnumerator(),
        e3 = source3.GetEnumerator(),
        e4 = source4.GetEnumerator())
    {
        while (e1.MoveNext() && e2.MoveNext() && e3.MoveNext() && e4.MoveNext())
        {
            yield return (e1.Current, e2.Current, e3.Current, e4.Current);
        }
    }
}
foreach (var combo in Zip4(cislo, zprava, id, recDate))
{
    Console.WriteLine($"{combo.Item1}-{combo.Item2}-{combo.Item3}-{combo.Item4}");
}