使用Aggregate处理数组拼接:排除末元素但单元素数组需保留
问题描述
现有字符串数组:
string[] fruits = { "apple", "mango", "orange", "passionfruit", "grape" };
需求:使用Aggregate进行拼接时,若数组元素数量大于1,拼接时排除最后一个元素,元素间用/分隔;若数组仅含一个元素(如string[] fruits = { "apple" };),则直接保留该元素。
示例结果:
- 多元素数组输出:
apple/mango/orange/passionfruit - 单元素数组输出:
apple
请问是否有简便的实现方式?
实现方案
当然有简便的实现方式,结合Take和Aggregate就能轻松搞定,逻辑清晰且代码简洁:
string[] fruits = { "apple", "mango", "orange", "passionfruit", "grape" }; string result = fruits.Length <= 1 ? fruits.FirstOrDefault() ?? string.Empty : fruits.Take(fruits.Length - 1).Aggregate((current, next) => $"{current}/{next}");
逻辑说明
- 当数组长度≤1时,直接取第一个元素(为空数组时返回空字符串做兜底处理)
- 当数组长度>1时,通过
Take(fruits.Length - 1)截取掉最后一个元素,再用Aggregate将剩余元素以/为分隔符拼接起来
如果偏好链式调用的写法,也可以写成这样(可读性稍弱,按需选择):
string result = fruits.Take(fruits.Length > 1 ? fruits.Length - 1 : fruits.Length) .Aggregate((current, next) => $"{current}/{next}");
日常开发更推荐第一种写法,逻辑直白,后续维护成本更低。
内容的提问来源于stack exchange,提问作者lemoncher2
相关产品推荐
相关产品推荐

