[英]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.