小编Chr*_*ese的帖子

快速从C#HashSet中获取随机元素

我需要存储一组元素.我需要的是功能

  1. 删除(单个)元素和
  2. 添加(组)元素和
  3. 每个对象应该只在集合中一次
  4. 从集合中获取随机元素

我选择了HashSet(C#),因为它运行快速删除元素的方法(hashSet.remove(element)),添加集合(hashSet.UnionWith(anotherHashSet))和HashSet的性质保证没有重复,所以要求1到3是照顾的.

我发现获得随机元素的唯一方法是

Object object = hashSet.ElementAt(rnd.Next(hashSet.Count));
Run Code Online (Sandbox Code Playgroud)

但这非常慢,因为我为地图的每个像素调用一次(从多个起点创建随机洪水填充;此刻mapize 500x500但我想要更大)并且hashset包含相当多的项目.(一项快速测试显示,在再次收缩之前,它会爆发5752个条目.)

分析(CPU采样)告诉我,我的ElementAt调用占用了50%以上.

我意识到在一个大的hashset上运行500x500并不是一件容易的事,但是其他操作(Remove和UnionWith)和ElementAt一样被调用,所以主要问题似乎是操作而不是调用次数.

我模糊地理解为什么从HashSet中获取某个元素是非常昂贵的(与从列表或其他有序数据结构中获取它相比,但我只想要一个随机选择.它真的很难以且没有办法解决它?我的目的是否有更好的数据结构?

将所有内容更改为列表并没有帮助,因为现在其他方法成为瓶颈而且需要更长的时间.

将HashSet转换为数组并从那里选择我的随机元素预计无济于事,因为从数组中选择一个随机元素很快,首先将hashset转换为数组需要比运行hashSet.ElementAt更长的时间.

如果你想更好地理解我想要做的事情:我的问题和答案的链接.

c# random performance hashset

11
推荐指数
2
解决办法
3481
查看次数

如何在我的打字稿生成的js中调用函数

所以我想在按下html定义的按钮时调用一个函数.问题是我无法访问/找到它,控制台记录错误"引用错误:函数未定义".

我的output.js(合并和编译的typescript)的精简版布局如下所示:

window.onload = function () {
    var game = new SpaceGen.Game();
};
var __extends = this.__extends || function (d, b) {
    for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
    function __() { this.constructor = d; }
    __.prototype = b.prototype;
    d.prototype = new __();
};
var SpaceGen;

(function (SpaceGen) {
    var Game = (function (_super) {
        __extends(Game, _super);
        function Game() {
            _super.call(this, 512, 640, Phaser.AUTO, 'content');

            this.state.add('state_World', SpaceGen.World, false);

            this.state.start('state_World');
        }
        return Game;
    })(Phaser.Game);
    SpaceGen.Game = Game;
})(SpaceGen …
Run Code Online (Sandbox Code Playgroud)

html javascript typescript phaser-framework

1
推荐指数
1
解决办法
2562
查看次数

jQuery click()只是不起作用

问题

在我的页面上,当<a>单击指定时,页面的另一部分应该更改.在我的情况下,我现在正试图淡出图像(为了显示第一个背后的图像),但我尝试了不同的更改(更改z-index(带.css)或src(使用.attr) ).

我确定事件不是问题,它是触发器.我甚至可以使用以下方法:

<a onclick='$("img").toggleClass("active")' class="wr-nav-prev"> 
Run Code Online (Sandbox Code Playgroud)

但是因为我对javascript(和jQuery)真的很新,所以我不想以这种方式解决.

试着这样做:

$(".wr-nav-next").click(function(){
    $("img").toggleClass("active");
});
Run Code Online (Sandbox Code Playgroud)

不会工作,我找不到原因.我改变了选择器大约一百次(<a>围绕一个跨度和一个div).

我希望你已经看到了问题,并在你笑完之后告诉我我的错误!:)

如果没有,也许我的代码的那些部分会有所帮助:在你需要看到它的样子的情况下:我试图重建这个名为"使用CSS3的圆形导航效果"的页面/示例来自Codrops的Mary Lou

HTML

缺少几行(如css链接).我很确定它们并不重要.

<script type="text/javascript" src="jquery-1.7.min.js"></script>
<script type="text/javascript" src="centeritem.js"></script>

<script type="text/javascript">
$(document).ready(function() {
    CenterItem('#wr');
});
$(window).resize(function() {
    CenterItem('#wr');
});
$(".wr-nav-next").click(function(){
    $("img").toggleClass("active");
});
</script>

</head>
<body>
<div id="wr">
    <div class="wr-nav"> 
        <a onclick='$("img").toggleClass("active")' class="wr-nav-prev"> 
            <span>Previous picture</span>
            <div></div>
        </a>
        <a class="wr-nav-next">
            <span>Next picture</span>
            <div></div>
        </a>
    </div>
    <div>
        <img class="active" src="Images/large/1.jpg">
        <img src="Images/large/2.jpg">
    </div>
</div>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

CSS …

jquery function onclick

0
推荐指数
1
解决办法
4462
查看次数