繁体   English   中英

将2D数组转换为C#中的连接字符串列表

[英]Convert 2D array to list of joined strings in c#

我想有效地将​​多维对象数组转换为连接数组的列表。

首先,我将2D数组转换为数组列表:

object[,] data; // This contains all the data.
int count = 0;
List<string[]> dataList = data.Cast<string>()
                          .GroupBy(x => count++ / data.GetLength(1))
                          .Select(g => g.ToArray())
                          .ToList();

现在,我要做的是创建一个列表,在其中修剪,然后将每个数组中的所有数据连接起来。 为了阐明我的意思,我可以使用以下方法做到这一点:

List<string> dataListCombined = new List<string>();
foreach (string[] s in dataList)
{
    for (int i = 0; i < s.Length; i++)
    {
        s[i] = s[i].Trim();
    }
    dataListCombined.Add(string.Join(",", s));
}

但我只想知道是否有更有效的方法。 我可以更改上面使用的LINQ Im吗? 谢谢

在这两个块中,以下LINQ代码将产生与完整代码相同的结果:

此代码适用于任何级别(维度)的多维数组

//dimensions in the array
int arrayDimensions = data.Rank;

//create a group of items in each row of the array
//join all items of each group into a comma separated string
//combine all formed strings into a list of strings

List<string> dataListCombined = 
data.Cast<string>().Select((s, i) => new { GroupIndex = i / arrayDimensions, Item = s.Trim()}).
GroupBy(g => g.GroupIndex).Select(g => string.Join(",", g.Select(x => x.Item))).ToList();

您可以访问索引值时LINQ一个小窍门是模拟for与循环Enumerable.Range 这不是更有效,甚至更清晰,但确实允许轻松索引的代码:

var dataCombined = Enumerable.Range(0, data.GetLength(0))
                             .Select(ri => String.Join(",", Enumerable.Range(0, data.GetLength(1))
                                                                      .Select(ci => data[ri,ci].ToString()
                                                                                               .Trim())))
                             .ToList();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM