如何在c#中每3项使用逗号将数组连接到字符串
本文关键字:数组 连接 字符串 中每 3项 | 更新日期: 2023-09-27 18:27:43
假设我有一个数组。
string[] temp = { "a", "b", "c", "d", "e", "f", "g", "h", "i", "j" };
我想加入他们的逗号每3项如下。
string[] temp2 = { "a,b,c", "d,e,f", "g,h,i", "j" };
我知道我可以使用
string temp3 = string.Join(",", temp);
但这给了我的结果
"a,b,c,d,e,f,g,h,i,j"
有人有主意吗?
一种快速简单的方法,将您的项目分为三组:
string[] temp = { "a", "b", "c", "d", "e", "f", "g", "h", "i", "j" };
string[] temp2 = temp.Select((item, index) => new
{
Char = item,
Index = index
})
.GroupBy(i => i.Index / 3, i => i.Char)
.Select(grp => string.Join(",", grp))
.ToArray();
更新为使用.GroupBy
的重载,允许您指定元素选择器,因为我认为这是一种更干净的方法。从@Jamiec的回答中合并
这里发生了什么:
- 我们将
temp
的每个元素投影到一个新元素中——一个具有Char
和Index
属性的匿名对象 - 然后,我们根据项的索引和3之间的整数除法结果对结果的Enumerable进行分组。对于
.GroupBy
的第二个参数,我们指定希望组中的每个项都是匿名对象的Char
属性 - 然后,我们调用
.Select
来再次投影分组的元素。这一次,我们的投影函数需要调用string.Join
,将每组字符串传递给该方法 - 在这一点上,我们有一个
IEnumerable<string>
,它看起来像我们想要的那样,所以只需要调用ToArray
来从我们的Enumerable创建一个数组
您可以将Chunk
方法(归功于CaseyB)与string.Join
:相结合
string[] temp2 = temp.Chunk(3).Select(x => string.Join(",", x)).ToArray();
/// <summary>
/// Break a list of items into chunks of a specific size
/// </summary>
public static IEnumerable<IEnumerable<T>> Chunk<T>(this IEnumerable<T> source, int chunksize)
{
while (source.Any())
{
yield return source.Take(chunksize);
source = source.Skip(chunksize);
}
}
可以通过将Linq语句链接在一起来完成:
var grouped = temp.Select( (e,i) => new{ Index=i/3, Item=e})
.GroupBy(x => x.Index, x=> x.Item)
.Select( x => String.Join(",",x) );
现场示例:http://rextester.com/AHZM76517
您可以使用MoreLINQ Batch:
var temp3 = temp.Batch(3).Select(b => String.Join(",", b));