首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在y列中尽可能均匀地分配x项?

如何在y列中尽可能均匀地分配x项?
EN

Stack Overflow用户
提问于 2014-06-05 20:02:22
回答 1查看 709关注 0票数 3

我收藏了一批物品。我还拥有可能更改的动态列数。

我需要一个将我的项目重新分配到桶中的算法,这样我就可以将它们绑定到UI中。我想填下来,然后跨越,但以一种方式,首先填补宽度。

我想要尽可能均匀和‘矩形’的分布。

这种安排是错误的,因为它没有填充第9栏。

代码语言:javascript
运行
复制
            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

这种安排是正确的,虽然不那么可取.

代码语言:javascript
运行
复制
            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这个,它在视觉上更平衡。

代码语言:javascript
运行
复制
            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 

谢谢。这是问答,我已经解决了。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-06-05 20:02:22

这将平衡项目之间的桶‘左偏’。

代码语言:javascript
运行
复制
    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;
    }
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24069238

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档