我收藏了一批物品。我还拥有可能更改的动态列数。
我需要一个将我的项目重新分配到桶中的算法,这样我就可以将它们绑定到UI中。我想填下来,然后跨越,但以一种方式,首先填补宽度。
我想要尽可能均匀和‘矩形’的分布。
这种安排是错误的,因为它没有填充第9栏。
1 2 3 4 5 6 7 8 9
A D G J M P S V
B E H K N Q T
C F I L O R U这种安排是正确的,虽然不那么可取.
1 2 3 4 5 6 7 8 9
A D G J M P S U V
B E H K N Q T
C F I L O R...than这个,它在视觉上更平衡。
1 2 3 4 5 6 7 8 9
A D G J M O Q S U
B E H K N P R T V
C F I L 谢谢。这是问答,我已经解决了。
发布于 2014-06-05 20:02:22
这将平衡项目之间的桶‘左偏’。
public static T[][] FillBucketsEvenly<T>(IEnumerable<T> items, int bucketCount)
{
int itemsPerBucket = items.Count() / bucketCount;
int countOfBucketsTakingExtraOne = items.Count() % bucketCount;
T[][] buckets = new T[bucketCount][];
// Build empty array structure.
for (int i = 0; i < bucketCount; i++)
{
if (i < countOfBucketsTakingExtraOne)
{
buckets[i] = new T[itemsPerBucket + 1];
}
else
{
buckets[i] = new T[itemsPerBucket];
}
}
// Fill the structure.
int itemsAdded = 0;
foreach(var bucket in buckets)
{
int grabSize = bucket.Count();
var grab = items.Skip(itemsAdded).Take(grabSize);
for (int i = 0; i < grabSize; i++)
{
bucket[i] = grab.ElementAt(i);
}
itemsAdded += grabSize;
}
return buckets;
}https://stackoverflow.com/questions/24069238
复制相似问题