Blazor数组短元素合并逻辑实现咨询:连续短元素最多合并3次
Blazor数组元素合并逻辑实现方案
实现步骤
- 编写合并逻辑方法:创建处理数组元素合并的方法,严格遵循「元素长度<4则合并至下一个,连续短元素最多合并3次」的规则。
- 修改参数更新逻辑:在
OnParametersSet中拆分字符串后,立即调用合并方法处理titleList。 - 修正随机索引生成逻辑:确保随机索引适配处理后的数组长度,避免越界。
完整代码实现
@foreach (var titleIndex in randomtitle) { <span>@titleList[titleIndex]</span> } @code { [Parameter] public string theTitle { get; set; } private string[] titleList = Array.Empty<string>(); protected override void OnParametersSet() { if (!string.IsNullOrEmpty(theTitle)) { var splitTitles = theTitle.Split(" "); titleList = MergeShortElements(splitTitles).ToArray(); } else { titleList = Array.Empty<string>(); } } private Random random = new(); private IEnumerable<int> randomtitle => titleList.Length >= 2 ? Enumerable.Range(0, titleList.Length) .OrderBy(x => random.Next()) .Take(2) .ToList() : Enumerable.Empty<int>(); // 核心合并逻辑方法 private List<string> MergeShortElements(string[] originalArray) { var result = new List<string>(); string currentMerge = string.Empty; int consecutiveShortCount = 0; foreach (var item in originalArray) { if (item.Length < 4) { currentMerge += (currentMerge.Length > 0 ? " " : "") + item; consecutiveShortCount++; // 达到最多连续合并3次(累计4个短元素),立即存入结果 if (consecutiveShortCount == 3) { result.Add(currentMerge); currentMerge = string.Empty; consecutiveShortCount = 0; } } else { // 先处理之前未完成的合并 if (!string.IsNullOrEmpty(currentMerge)) { result.Add(currentMerge); currentMerge = string.Empty; consecutiveShortCount = 0; } result.Add(item); } } // 处理遍历结束后剩余的合并内容 if (!string.IsNullOrEmpty(currentMerge)) { result.Add(currentMerge); } return result; } }
关键逻辑说明
- 合并方法
MergeShortElements:- 用
currentMerge暂存待合并的短元素,consecutiveShortCount记录连续短元素数量。 - 当连续短元素达到3个时(累计合并3次),立即将合并后的字符串存入结果列表,避免过度合并。
- 遇到长度≥4的元素时,先清空之前的合并缓存,再将当前元素直接加入结果。
- 用
- 随机索引生成:增加数组长度判断,当处理后的数组元素不足2个时返回空集合,避免越界错误。
- UI渲染修正:修复原代码中
<span>标签的闭合错误,确保渲染正常。
内容的提问来源于stack exchange,提问作者Arjun Ghimire
相关产品推荐
相关产品推荐

