问题列表 - 第16868页

按字典值返回对象的索引

这是我的场景:我有一个包含2个值的字典项数组.

array = (
    {
        id = 1;
        title = "Salon One";
    },
    {
        id = 2;
        title = "Salon Two";
    }
)
Run Code Online (Sandbox Code Playgroud)

我甚至不确定这是否可行,但是我可以将此数组传递给函数并根据字典值返回对象索引吗?

- (int)getObjectIndex:(NSMutableArray *)array byName:(NSString *)theName{
    int index;

    /* Pseudo Code*/
    /*index = the index value in 'array' of objectForKey:@"title" = theName*/

    return index;
}
Run Code Online (Sandbox Code Playgroud)

objective-c

3
推荐指数
2
解决办法
3247
查看次数

需要的建议:替代.NET中的"is"和"as"运算符

我希望这个问题不被认为过于主观 - 我真的不期待一个明确的答案,但我希望每个人的意见至少能帮助我形成自己的意见.

我正在实现一个自定义类型系统,它是经典OOP类型系统的超集.在这种类型的系统中,对象实例可以在运行时组合以形成新的实例,同时保留个体身份.

这段代码:

var p = new Person();
var pa = new Partner(p);
Run Code Online (Sandbox Code Playgroud)

...产生单个组合对象,其中"p"和"pa"是不同的符合OOP的视图.IOW,更改其中一个视图的属性值会立即反映在同时包含此属性的任何其他视图上.

这一切都运行良好,但它缺少两个用于查询类型标识的关键API.我真的希望能够编写这样的代码:

if (p is Partner)
{
    (p as Partner).SomePartnerProperty = "...";
}
Run Code Online (Sandbox Code Playgroud)

这当然不起作用,因为"is"和"as"操作符的行为不能超出/扩展超出.NET的OOP规则所要求的范围.尽管如此,我仍然需要在我的类型系统中使用此功能.

我的第一个想法是使用附加到我的类型系统的所有实例的通用扩展方法:

public static bool Is<T>(this BaseType target) where T : BaseType { ... }
public static T As<T>(this BaseType target) where T : BaseType { ... }
Run Code Online (Sandbox Code Playgroud)

忽略不区分大小写的语言中的名称冲突问题,这在功能方面似乎没问题:

if (p.Is<Partner>())
{
    p.As<Partner>().SomePartnerProperty = "...";
}
Run Code Online (Sandbox Code Playgroud)

但是,我不禁想知道 - 这真的是最好的,最方便的API吗?

您如何建议我实现这两个操作符,以便在应用程序代码中使用它们自然?

更新:对于任何想知道这种类型系统的目的的人......基本上,每种类型都属于两类:身份角色.在我上面给出的示例中,Person是一个Identity(按设计),而Partner是一个Role(再次,通过设计 - 它的设计可能不同).这种类型的系统的基本规则是,任何数量的角色可以与任何给定的身份组成,而身份本身可能只用一个更高的身份组成(例如一个人有可能成为一个联系,但绝不能成为公司).这种类型系统使应用程序能够透明地处理例如合作伙伴对象,而不管他们拥有什么身份(例如,人员,公司,银行等).

.net c# type-systems

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

为什么将UserForm显示为模态停止代码执行?

以下VBA代码停在Me.Show.从我的测试来看,似乎Me.Show停止所有代码执行,即使代码在UserForm中.

这部分在UserForm之外:

Public Sub TestProgress()  
    Dim objProgress As New UserForm1
    objProgress.ShowProgress
    Unload objProgress
End Sub
Run Code Online (Sandbox Code Playgroud)

这部分在UserForm中:

Private Sub ShowProgress()
    Me.Show vbModal
    Dim intSecond As Integer
    For intSecond = 1 To 5
        Application.Wait Now + TimeValue("0:00:01")
        Me.ProgressBar1.Value = intSecond / 5 * 100
    Next intSecond
    Me.Hide
End Sub
Run Code Online (Sandbox Code Playgroud)

Me.Show显示UserForm后代码停止.没有错误,它只是停止执行代码.似乎在VBA中的模式UserForm中执行代码的唯一方法是将它包含在UserForm_Activate过程中,如下所示:

这部分在UserForm之外:

Public Sub TestProgress()  
    Dim objProgress As New UserForm1
    Load objProgress
    Unload objProgress
End Sub
Run Code Online (Sandbox Code Playgroud)

这部分在UserForm中:

Private Sub UserForm_Initialize()
    Me.Show vbModal
End Sub …
Run Code Online (Sandbox Code Playgroud)

vba modal-dialog userform

7
推荐指数
3
解决办法
8万
查看次数

如何使用BigInteger?

我有这段代码,但是没有用:

BigInteger sum = BigInteger.valueOf(0);
for(int i = 2; i < 5000; i++) {
    if (isPrim(i)) {
        sum.add(BigInteger.valueOf(i));
    }
}
Run Code Online (Sandbox Code Playgroud)

sum变量总是0.我做错了什么?

java biginteger

150
推荐指数
5
解决办法
33万
查看次数

使用extjs在浏览器中创建一个窗口浏览器

我正在尝试使用extJS在窗口内创建一个迷你浏览器.

这是我到目前为止所拥有的:

panelContent = new Ext.Panel({
        region: 'center',
        margins: '0 0 0 0',
        autoScroll: true,
        html: '<iframe style="overflow:auto;width:100%;height:100%;" frameborder="0"  src="http://www.google.com"></iframe>'
    });
var tb = new Ext.Toolbar();
var combo = new Ext.form.ComboBox({
     width:435,
    });
tb.addField(combo);
tb.doLayout();
browser = new Ext.Window({
        title: 'Internet Browser',
        tbar: tb, 
    closable: true,
        closeAction: 'hide',
        width: 600,
        height: 600,
        border:false,
        plain: true,
        layout: 'border',
        items: [panelContent],
});
Run Code Online (Sandbox Code Playgroud)

我试图让iframe加载组合框中输入内容的内容,但我无法找到如何"告诉"他加载页面,当用户点击进入时我甚至无法"获取" ".也许用输入框替换组合框?不知道该怎么做(从extjs开始).

谢谢您的帮助.

extjs

7
推荐指数
2
解决办法
2万
查看次数

Doctrine schema.yml生成器

我对学说很新.我为自己创建了两个带有学说的小项目,但现在我要为我的客户创建一个大项目.该项目将有50多个表.有没有办法生成schema.yml?我尝试了DB Designer并将其转换为schema.yml,但我仍然需要手动检查和重写定义.谢谢

schema doctrine generator

6
推荐指数
2
解决办法
8914
查看次数

您希望在游戏编程DSL中看到哪些功能?

我和我的朋友正处于创建一个专门为游戏编程而设计的领域专用语言的第一阶段.

语言将相当低级,它将具有类似C的语法,可选的垃圾收集,并将面向具有很少内存或处理能力的系统(即Nintendo DS),但应该足够强大以便于PC发展很容易.它不是脚本语言,而是编译语言,但由于我们不想花费数月时间编写普通编译器,因此第一个实现基本上是一个LanguageName-to-C转换器,以TCC或GCC作为结束编译器.

现在,我对你们所有的游戏程序员都有一个问题:

你想用这种语言看到什么?哪些功能,实现和语法方面最适合它?要避免什么?

编辑:

我们已经想到的一些事情:

  • 基于状态的对象 - 对象可以存在于其中一个状态(或子状态)中
  • 事件和函数 - 事件不一定要被调用,并且可以冒泡
  • 有限的动态分配和指针支持 - 我们希望它尽可能安全
  • 支持对象合成(Hero由(动态)Actor,Hurtable,Steerable等组成)
  • 状态中的"资源",在状态的开始/结束时自动加载和卸载(例如,OpenGL纹理对象是资源)
  • 本地化和序列化的基本支持
  • 一种可快速解析的语法
  • 我们想使语言尽可能一致:一切都为值传递,每一个声明有可预测的语法(如function retType name(type arg) is (qualifier, list) { };无const,static,public,等限定词除了在预选赛名单的任何地方)

dsl programming-languages language-design

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

Python - 最有用的列表 - 理解构造

Python的用户自制列表理解构造最有用吗?

我创建了以下两个量词,用于执行不同的验证操作:

def every(f, L): return not (False in [f(x) for x in L])
def some(f, L): return True in [f(x) for x in L]
Run Code Online (Sandbox Code Playgroud)

下面提出了一个优化版本(需要Python 2.5+):

def every(f, L): return all(f(x) for x in L)
def some(f, L): return any(f(x) for x in L) 
Run Code Online (Sandbox Code Playgroud)

那么,它是如何工作的?

"""For all x in [1,4,9] there exists such y from [1,2,3] that x = y**2"""
answer = every([1,4,9], lambda x: some([1,2,3], lambda y: y**2 == x))
Run Code Online (Sandbox Code Playgroud)

使用此类操作,您可以轻松地进行智能验证,例如:

"""There exists at least one bot in …
Run Code Online (Sandbox Code Playgroud)

python list-comprehension list

-1
推荐指数
2
解决办法
1607
查看次数

fxcop自定义规则 - 避免每个文件有多个类

由于fxcop是一个程序集检查器,是否可以创建一个自定义规则来检查每个文件是否有多个类?

如果是的话,怎么做?

谢谢你的帮助

c# fxcop

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

大型动态阵列 - 慢速写入

我有一个例程,它将序数元素("Day"或"Night"枚举类型)添加到多维动态数组中,该数组声明为:

TShiftType = (stDay, stNight);
TScheduleArray =  array of array of array [1..DaysPerWeek] of TShiftType;
Run Code Online (Sandbox Code Playgroud)

该数组可以包含1个元素(例如(Day, Day, Day, Day, Day, Night, Night))和20,000个元素之间的任何内容.每个元素本身可以具有子元素,这取决于正在处理的周数.

因此,两周数组中的一个元素可能如下所示:

((stDay, stDay, stDay, stDay, stDay, stNight, stNight), (stDay, stDay, stDay, stDay, stDay, stNight, stNight))

当元素数量相对较低(大约低于1000)时,这种运行速度非常快并且非常有效.一旦周数和元素增加,只需向数组添加一个新元素(在调用SetLength以将数组长度增加一个之后)开始以指数方式减慢.

有时我也会收到访问冲突.当我在Delphi中使用"Find Error"工具时,它会转到@DynArrayAsgCPU窗口中的方法.但是我从来没有得到过EOutOfMemoryDelphi帮助说如果没有足够的内存来重新分配变量那么我会得到的例外.

这是否会降低对内存预期行为的访问速度?我正在使用Delphi 6.

delphi

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