首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何压缩4个或更多数组

如何压缩4个或更多数组
EN

Stack Overflow用户
提问于 2019-05-02 11:46:00
回答 3查看 161关注 0票数 0

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

如何将这些数组组合成一个foreach循环,以便将这些数据存储到SQL中并与它们一起工作?

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

代码语言:javascript
复制
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);
        }
EN

回答 3

Stack Overflow用户

发布于 2019-05-02 12:24:30

尝试使用如下方法组合这些数组:

代码语言:javascript
复制
private static T[] Combine<T>(params IEnumerable<T>[] items) =>
                              items.SelectMany(i => i).Distinct().ToArray();

并使用它:

代码语言:javascript
复制
var combinedArrays = Combine(cislo, zprava, id, recDate);

for (int i = 0; i < combinedArrays.Length; i++)
{
    MessageBox.Show(i);
    MessageBox.Show(combinedArrays[i]);
}

如果要执行sql语句,最好创建一个新类并将其填充到数据中。样本:

代码语言:javascript
复制
public class Item
{
   public string Id { get; set; }
   public string Cislo { get; set; }
   public string Zprava { get; set; }
   public string RecDate { get; set; }
}

var items = id.Select((id, index) => new Item() 
                                       {
                                          Id = id,
                                          Cislo = cislo[index],
                                          Zprava = zprava[index],
                                          RecDate = recDate[index]                                             
                                        }).ToList();

foreach (var item in items)
{
   string sql = " insert into contacts(id, zprava, cislo) values (@id, @zprava, @cislo)";

   var command = new SqlCommand(sql, connection);

   // bind the parameters in the sql based on the `item` object.
   // execute the command, etc..
}
票数 1
EN

Stack Overflow用户

发布于 2019-05-02 12:24:40

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

代码语言:javascript
复制
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;
    }

票数 0
EN

Stack Overflow用户

发布于 2019-05-02 14:42:24

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

代码语言:javascript
复制
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);
        }
    }
}

用法示例:

代码语言:javascript
复制
foreach (var combo in Zip4(cislo, zprava, id, recDate))
{
    Console.WriteLine($"{combo.Item1}-{combo.Item2}-{combo.Item3}-{combo.Item4}");
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55951765

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档