相关疑难解决方法(0)

Java hashmap真的是O(1)吗?

我已经看到了一些关于SO re Java hashmaps及其O(1)查找时间的有趣声明.有人可以解释为什么会这样吗?除非这些哈希图与我买的任何哈希算法有很大的不同,否则必须始终存在包含冲突的数据集.

在这种情况下,查找将是O(n)而不是O(1).

有人可以解释他们是否 O(1),如果是,他们如何实现这一目标?

java big-o hashmap time-complexity

153
推荐指数
6
解决办法
11万
查看次数

C#将函数存储在Dictionary中

如何创建一个可以存储函数的Dictionary?

谢谢.

我有大约30多个可以从用户执行的功能.我希望能够以这种方式执行该功能:

   private void functionName(arg1, arg2, arg3)
   {
       // code
   }

   dictionaryName.add("doSomething", functionName);

    private void interceptCommand(string command)
    {
        foreach ( var cmd in dictionaryName )
        {
            if ( cmd.Key.Equals(command) )
            {
                cmd.Value.Invoke();
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

但是,函数签名并不总是相同,因此具有不同数量的参数.

c# dictionary pointers function

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

是否有效:C#多个三元运算符+如果不匹配则抛出

您是否发现以下C#代码清晰可辨?

private bool CanExecuteAdd(string parameter) {
    return
        this.Script == null ? false
        : parameter == "Step" ? true
        : parameter == "Element" ? this.ElementSelectedInLibrary != null && this.SelectedStep != null
        : parameter == "Choice" ? this.SelectedElement != null
        : parameter == "Jump" ? this.SelectedStep != null
        : parameter == "Conditional jump" ? false
        : false.Throw("Unknown Add parameter {0} in XAML.".F(parameter));
}
Run Code Online (Sandbox Code Playgroud)

其中Throw定义为:

public static T Throw<T>(this T ignored, string message) {
    throw new Exception(message);
}
Run Code Online (Sandbox Code Playgroud)

我知道这不是惯用的C#.但是,你能在第一眼还是第二眼看到它?还是我偏离了太远?

c# coding-style exception conditional-operator

34
推荐指数
6
解决办法
9315
查看次数

切换语句不好?

我最近了解到开关语句在OOP中很糟糕,特别是罗伯特·马丁的"清洁代码"(第37-39页).

但请考虑这个场景:我正在编写一个游戏服务器,接收来自客户端的消息,其中包含一个表示玩家行为的整数,例如移动,攻击,挑选项目......等等,将有超过30种不同的动作.当我编写代码来处理这些消息时,没有想到我想到的解决方案,它将不得不在某处使用switch.如果不切换语句,我应该使用什么模式?

oop design-patterns coding-style switch-statement

32
推荐指数
5
解决办法
4万
查看次数

C#:Enum反模式

有人一直在谈论Enums一般违反清洁守则原则,所以我正在寻找人们最喜欢的Enum反模式和替代解决方案.

例如,我见过这样的代码:

switch(enumValue) {
    case myEnum.Value1:
        // ...
        break;
    case myEnum.Value2:
        // ...
        break;
}
Run Code Online (Sandbox Code Playgroud)

它比带有魔术字符串的switch语句更好一步,但这可能已经通过工厂,容器或其他模式更好地解决了.

甚至像这样的老派代码:

if(enumValue == myEnum.Value1) {
   // ...
} else if (enumValue == myEnum.Value2) {
   // ...
}
Run Code Online (Sandbox Code Playgroud)

您对枚举有哪些其他反模式和更好的实现

.net c# enums design-patterns anti-patterns

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