我有一个“Element”类,其中包含“Index”属性,用于对元素列表进行排序。当我向列表添加元素时,我希望根据列表中已有的元素均匀地分散新元素。
这意味着如果我有6个元素并想要添加3个元素,则结果应如下图所示:
[图片]
我目前代码的问题在于它使用了错误的索引,因此如果我有2个现有元素并添加9个元素,则最后一个元素的索引为18,这一点我真的不理解。
这意味着如果我有6个元素并想要添加3个元素,则结果应如下图所示:
[图片]
我目前代码的问题在于它使用了错误的索引,因此如果我有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;
}
Convert.ToDouble(existingElements.Count) / Convert.ToDouble(elementsToAdd.Count)
转换为1.0 * existingElements.Count / elementsToAdd.Count
。或者可以使用(double)
强制转换。为什么所有人都坚持使用Convert
机制来处理这样简单的事情呢? ;0 - BartoszKP