如果数组的元素长度小于4,我将尝试将下一个数组元素连接到数组中的单个元素。它应该添加到下一个元素索引中。
另一个逻辑是,如果下一个连续的数组长度也小于4个字符,那么它也会加入下一个数组元素,总共最多3次。我想实现这一点。这对我来说越来越复杂了——我不明白这个逻辑。
这是代码,这里它在titleList
上有数组,现在我们必须在这个数组列表中使用上面的逻辑。
@foreach (var title in randomtitle)
{
</span>@titleList.ElementAt(title)</span>
}
@code {
[Parameter]
public string theTitle { get; set; }
private string[] titleList = Array.Empty<string>();
protected override void OnParametersSet()
{
if (!string.IsNullOrEmpty(theTitle))
{
titleList = theTitle.Split(" ");
}
}
private Random random = new();
private IEnumerable<int> randomtitle =>
Enumerable.Range(0, titleList.Count() - 1) // { 0, 1, 2, 3 } generate sequence
.OrderBy(x => random.Next()) // { 3, 1, 0, 2 } random shuffle
.Take(2) // { 3, 1 } pick two
.ToList();
}
我认为您正在寻找一种可以执行以下操作的方法:
- 获取字符串集合(如
string[]
( - 迭代每个字符串并检查其长度是否大于或等于4
- 如果是,一切都很好,就顺其自然吧
- 如果没有,请将next附加到当前字符串,然后检查其长度
- 如果它们仍然不大于或等于4,则追加下一个,但最多3次
然后这应该可以工作(尽管测试不好(:
演示:https://dotnetfiddle.net/2uHREv
static string[] MergeItems(IList<string> all, int minLength, int maxGroupCount)
{
List<string> list = new List<string>(all.Count);
for(int i = 0; i < all.Count; i++)
{
string current = all[i];
if(i == all.Count - 1)
{
list.Add(current);
break;
}
if (current.Length < minLength)
{
for (int ii = 1; ii < maxGroupCount && i + ii < all.Count; ii++)
{
int nextIndex = i + ii;
string next = all[nextIndex];
current = current + next;
if (current.Length >= minLength || ii+1 == maxGroupCount)
{
list.Add(current);
i = nextIndex;
break;
}
}
}
else
{
list.Add(current);
}
}
return list.ToArray();
}