gpt4 book ai didi

c# - 将元素均匀地添加到列表中

转载 作者:行者123 更新时间:2023-11-30 12:46:25 25 4
gpt4 key购买 nike

我有一个带有“索引”属性的“元素”类,用于对元素列表进行排序。当我向列表添加元素时,我想根据列表中的现有元素均匀地分布新元素。

这意味着如果我有 6 个元素并想添加 3 个元素,结果应该如下图所示:

enter image description here

到目前为止,我的代码(见下文)存在的问题是它使用了错误的索引,所以如果我有 2 个现有元素并添加 9 个元素,最后一个元素索引是 18,我不太明白。

public List<Element> AddElements()
{
// The elements are inserted before this
List<Element> existingElements = new List<Element>();
List<Element> elementsToAdd = new List<Element>();

int elementsLeft = 1;

foreach (Element element in elementsToAdd)
{
// Generate the next index
int nextIndex = 1;

// Only proceed if any elements exists
if (existingElements.Count > 0)
{
// divisonResult = 12 / 4 = 3
double divisonResult = Math.Floor(Convert.ToDouble(existingElements.Count) / Convert.ToDouble(elementsToAdd.Count));

// modulusResult = 12 % 2 = 0
double modulusResult = Convert.ToDouble(existingElements.Count) % Convert.ToDouble(elementsToAdd.Count);

// NextPosition = (3 + 1) * 1 = 4
// NextPosition = (3 + 1) * 2 = 8
// NextPosition = (3 + 1) * 3 = 12
// NextPosition = (3 + 1) * 4 = 16
if (modulusResult <= 0 && elementsToAdd.Count > 1)
nextIndex = Convert.ToInt16(divisonResult) * elementsLeft;
else
nextIndex = (Convert.ToInt16(divisonResult) + 1) * elementsLeft;

elementsLeft++;

// Move existing elements
var elementsToBeMoved = existingElements.Where(elementQuery => elementQuery.Index >= nextIndex);

foreach (Element elementToBeMoved in elementsToBeMoved)
{
elementToBeMoved.Index++;
}
}

// Add element to existing elements
existingElements.Add(new Element { Index = nextIndex });
}

// Return new list
return existingElements;
}

最佳答案

将原始元素数除以要混合的列表。 6/3 + 1=3(每第 3 个项目将来自 list2)。运行一个循环 for(var i = 0; i < list1.Count + list2.Count; i++) 在每个循环中检查新列表的位置是否在你应该从 list2 中插入项目的位置,否则插入下一个项目来自列表 1。这是作为扩展方法...

class Program
{
static void Main(string[] args)
{
var existingElements = new List<int> { 1, 2, 3, 4, 5, 6 };
var elementsToAdd = new List<int> { 100, 101, 102 };
existingElements = existingElements.Mix(elementsToAdd).ToList();
Console.WriteLine(String.Join(", ", existingElements));
Console.ReadKey();
}
}

public static class ExtensionMethods
{
public static IEnumerable<T> Mix<T>(this IEnumerable<T> source, IEnumerable<T> mix)
{
var list1 = source.ToArray();
var list2 = mix.ToArray();
var total = list1.Count() + list2.Count();
var skip = (list1.Count() / list2.Count()) + 1;
var count1 = 0;
var count2 = 0;
var finalList = new List<T>();

for (var i = 0; i < total; i++)
{
var count = i + 1;
if (count % skip == 0)
{
finalList.Add(list2[count2]);
count2++;
}
else
{
finalList.Add(list1[count1]);
count1++;
}
}

return finalList;
}
}

关于c# - 将元素均匀地添加到列表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20401530/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com